2011-11-08 5 views
-1

ユーザーがショートリストを作成できるようにしようとしていますが、そのショートリストを追加して、そこにあるものを上書きします、私は間違って何をしていますか?セッションにデータを保存すると、一度に1つのデータしか保存できないように見える

function validate_add_cart_item($id){ 

    $this->db->select('candidates.candidate_id, candidates.first_name, candidates.surname, candidates.DOB, candidates.talent, candidates.location, candidates.availability_order, candidates.availability, candidates.availability_comments, candidate_assets.url, candidate_assets.asset_size') 
    ->from('candidates') 
    ->join('candidate_assets', 'candidate_assets.candidates_candidate_id = candidates.candidate_id', 'left') 
    ->where('candidate_assets.asset_size', 'small') 
    ->where('candidate_assets.asset_type', 'image') 
    ->where('candidates.candidate_id', (int)$id) 
    ->limit(1) 
    ->order_by('candidates.availability_order', 'DESC'); 

    $query = $this->db->get(); 

    //die($this->db->last_query()); 
    // Check if a row has been found 
    if($query->num_rows > 0){ 
     foreach ($query->result() as $row) 
     { 
      $data = array(
       'id'  => $id, 
       'name' => $row->first_name." ".$row->surname, 
       'location' => $row->location, 
       'talent' => $row->talent, 
       'image' => $row->url 
      ); 

      $this->session->set_userdata('shortlist', array($data)); 
      return TRUE; 
     } 

    // Nothing found! Return FALSE! 
    } else { 
     return FALSE; 
    } 

答えて

1
foreach(...){ 
     // ... 
    $this->session->set_userdata('shortlist', array($data)); 
    } 

あなたは、以前のユーザデータを複数回上書きされます。この代わりに配列を作成し、set_userdataを一度呼び出す必要があります。

$udata = array(); 
    foreach(...){ 
    // ... 
    $udata []= $data; 
    } 
    $this->session->set_userdata('shortlist', $udata); 

編集:

そして、あなたのクエリが1行しか返し、あなたはおそらくそれを上書きし、あなたの配列ではなく更新するので、このような何か:

$udata = $this->session->get_userdata('shortlist'); 
    foreach(...){ 
    // ... 
    $udata []= $data; 
    } 
    $this->session->set_userdata('shortlist', $udata); 
+0

セッションデータはクッキーに保存され、データの量はごくわずかです。 – CarstenSchmitz

1
$this->session->set_userdata('shortlist', array($data)); 

shortlistに$データを追加するが、1つの要素がある配列とそれを上書きしません:$データ内の現在のデータを。
おそらく(未テスト)欲しい:

if($query->num_rows > 0) { 
    $data = array(); 
    foreach ($query->result() as $row) 
    { 
     // append the new "record" to the array $data 
     $data[] = array(
      'id'  => $id, 
      'name' => $row->first_name." ".$row->surname, 
      'location' => $row->location, 
      'talent' => $row->talent, 
      'image' => $row->url 
     ); 
    } 
    $this->session->set_userdata('shortlist', $data); 
    return TRUE; 
} 
else { 
    ... 
+0

私はこれを試してみましたが、それ人1を1つ追加すると、セッションのショートリストが上書きされます – Udders

関連する問題