2017-03-02 6 views
0

セッションクラスでcodeigniterでカートを作成しようとしています。Codeigniter 3 - セッションに複数の配列を追加する

public function add_to_cart() 
    { 
     $cartitem = array(
      'id' => '1234', 
      'product' => 'butt scratcher', 
      'qty' => 1, 
      'price' => 2.99 
     ); 
      $this->session->set_userdata('cart',$cartitem); 
      print_r($this->session->cart); 
    } 

これはちょうど私が私が現在のインデックスを見つけ、それに1を追加する必要がありますが、私はcodeignitersセッションクラスに

$this->session->set_userdata['cart??',$data??'] 

答えて

3
を使用して

$_SESSION['cart'][$i] 

をどのように行うのかを推測、現在の配列を上書きします

複数の配列を現在の配列をオーバーライドせずにセッションに追加するには、最初に$this->session->userdata('session_id');を使用して既に設定されているセッションデータを取得する必要があります。

その後、取得したセッション配列に現在の配列を追加し、組み合わせた新しい配列を$this->session->set_userdata($newarray);を使用してセッションに設定する必要があります。

セッションで配列を設定できない場合は、json_encode()を使用してjsonに変換し、セッションに設定します。

cookieを使用して同じタスクを実行することもできます。

+0

ありがとうございました。 – Dale

+0

@Daleあなたを助けてくれてうれしいです:) :) –

0

このようにしてください。 $this->session->set_userdata($cartitem)は、keyをセッション変数に、valueを対応するsession valueと設定します。

public function add_to_cart() 
    { 
     $cartitem = array(
      'id' => 1234, 
      'product' => 'butt scratcher', 
      'qty' => 1, 
      'price' => 2.99 
     ); 
     $this->session->set_userdata($cartitem); 

    } 

その後

echo $this->session->userdata('id');//prints 1234 
+0

これは私のコードと全く同じですが、同じ問題で既存のデータを上書きします。 – Dale

1

関数INSERT_ORDER($製品)

{ 

    $data = array(
     'product_id'=> $products['product_id'], 
     'product_qty' => $products['product_qty'], 
     'product_price' => $products['product_price'], 
     'product_name' => $products['product_name'], 
     'product_image' => $products['product_image'], 
     'address'=>$products['address'] 
    ); 

     //$this->db->insert('order', $data); 
    if($this->session->userdata('cart_product1')==false) { 
     $this->session->set_userdata('cart_product1', $data); 
    } 
    elseif ($this->session->userdata('cart_product1')==true && $this->session->userdata('cart_product2')==false){ 
     $this->session->set_userdata('cart_product2', $data); 
    } 
    elseif ($this->session->userdata('cart_product1')==true && $this->session->userdata('cart_product2')==true && $this->session->userdata('cart_product3')==false){ 
     $this->session->set_userdata('cart_product3', $data); 
    } 
    elseif ($this->session->userdata('cart_product1')==true && $this->session->userdata('cart_product2')==true && $this->session->userdata('cart_product3')==true && $this->session->userdata('cart_product4')==false){ 
     $this->session->set_userdata('cart_product4', $data); 
    } 
    elseif ($this->session->userdata('cart_product1')==true && $this->session->userdata('cart_product2')==true && $this->session->userdata('cart_product3')==true && $this->session->userdata('cart_product4')==true && $this->session->userdata('cart_product5')==false){ 
     $this->session->set_userdata('cart_product5', $data); 
    } 
    elseif($this->session->userdata('cart_product1')==true && $this->session->userdata('cart_product2')==true && $this->session->userdata('cart_product3')==true && $this->session->userdata('cart_product4')==true && $this->session->userdata('cart_product5')==true) { 
     //print_r("You are not allowed to buy more than 5 items at a time");exit; 
     $this->load->view('quantityAccessPage'); 
    } 


} 

これは、私は、コントローラとビューを追加していないセッションCodeIgniterのに複数のアレイを追加するショッピングカートのためのモデルであります私はそれを良いアプローチではないが、私が5つの製品しか追加しなくても、codeigniterがセッションでmultiplt配列をとることができるので、私の要求を満たすことができると仮定しよう

関連する問題