2015-05-07 2 views
0

Я пытаюсь установить массив, но он не устанавливается. Каждый раз, когда вызывается функция Buy,, массив объявляется.Ошибка переменной массива - PHP Codeigniter

Это функция контроллера.

public function buy() { 
    if($this->session->userdata('counter')){ 
     $counter = $this->session->userdata('counter'); 
     $this->session->set_userdata('counter', $counter + 1); 
    } else { 
     $this->session->set_userdata('counter', 1); 

    } 
if(isset($bought)){ 
     $name = $this->input->post('name'); 
     $price = $this->input->post('price'); 
     $qty = $this->input->post('qty'); 
     $product = array('name' => $name, 'price' => $price, 'qty'=> $qty); 
     array_push($bought, $product); 
     var_dump($bought); 
     die(); 
    } else { 
     $bought = array(); 

    redirect(""); 
    } 

Как вы можете видеть, он должен помнить, что $ купил установлен, но он получает объявлен заново. Сейчас я

  • пытался сделать его глобальным, прежде, чем "функции __construct общественности()",
  • пытался «если (! Пусто),
  • пытался поставить на сессии
  • пытались найти ответ по всем StackOverflow ...

Пожалуйста, дайте мне знать, если дополнительная информация необходима. Спасибо большое!

+0

вы установите библиотеку сеанса в конструкторе контроллера ?? – Saty

+0

Нет, как его установить? –

+0

$ this-> load-> library ('session'); под вашим контроллером consrtustor – Saty

ответ

0

В вашем коде, когда вы проверяете $bought, его нет, поэтому он собирается каждый раз в else. Вместо этого определите blank array, а затем установите значения внутри него. Попытайтесь с -

if(isset($_SESSION['bought'])){ 
    $name = $this->input->post('name'); 
    $price = $this->input->post('price'); 
    $qty = $this->input->post('qty'); 
    $product = array('name' => $name, 'price' => $price, 'qty'=> $qty); 
    array_push($_SESSION['bought'], $product); 
    var_dump($_SESSION['bought']); 
    die(); 
} else { 
    $_SESSION['bought'] = array(); 
} 

И начните сеанс в верхней части страницы.

+0

Пробовал это, но он снова объявляется заново и всегда сохраняет только одно значение, только что установленное. –

+0

Вы хотите, чтобы он работал как тележка? –

+0

Да, вы правы. Тогда я передам все в корзину. –

0

У меня это работает.

Я сделал обходной путь с помощью SGT, поэтому теперь мой код выглядит следующим образом:

if($this->session->userdata('bought')){ 
     $name = $this->input->post('name'); 
     $price = $this->input->post('price'); 
     $qty = $this->input->post('qty'); 
     $product = array('name' => $name, 'price' => $price, 'qty'=> $qty); 

     // please see that here I just returned from old one and added new data to the old one. 
     // Then I just added the result to the session. 
     $old_session = $this->session->userdata('bought'); 
     array_push($old_session, $product); 
     $this->session->set_userdata('bought', $old_session); 

     redirect(""); 
    } else { 
     $this->session->set_userdata('bought', array()); 
} 
Смежные вопросы