Переменная массива не устанавливается - PHP Codeigniter

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

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

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("");
    }

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

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

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


person Nurgul Alshyn    schedule 07.05.2015    source источник
comment
Вы установили библиотеку сеансов в конструкторе контроллера ??   -  person Saty    schedule 07.05.2015
comment
$this-›load-›library('session'); под вашим контроллером   -  person Saty    schedule 07.05.2015


Ответы (2)


В вашем коде, когда вы проверяете $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();
}

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

person Sougata Bose    schedule 07.05.2015
comment
Пробовал это, но он снова объявляется заново и всегда сохраняет только одно значение, только что установленное. - person Nurgul Alshyn; 07.05.2015
comment
Да, ты прав. Тогда я отправлю все в корзину. - person Nurgul Alshyn; 07.05.2015
comment
Обновлен ответ. Используйте для этого сеанс. - person Sougata Bose; 07.05.2015
comment
Поскольку это Codeigniter, думаю, мне придется использовать $this-›session-›userdata... Я попробую, спасибо. - person Nurgul Alshyn; 07.05.2015
comment
Давайте продолжим это обсуждение в чате. - person Nurgul Alshyn; 07.05.2015

Я заработал.

Я сделал обходной путь с помощью 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());
}
person Nurgul Alshyn    schedule 07.05.2015