Удаление товара из корзины в сеансе | Codeigniter

#php #codeigniter #session #model-view-controller #multidimensional-array

#php #codeigniter #сеанс #модель-представление-контроллер #многомерный массив

Вопрос:

У меня есть товары в моей корзине с сеансом, и я хочу удалить элемент, мой вложенный массив выглядит следующим образом,

 [cart_items] => Array
        (
            [0] => Array
                (
                    [item_id] => 1
                    [item_name] => Neapolitan Pizza
                    [price] => 750.00
                    [toppings] => Array
                        (
                            [0] => Array
                                (
                                    [id] => 3
                                    [name] => Chilli
                                    [price] => 100.00
                                )

                            [1] => Array
                                (
                                    [id] => 4
                                    [name] => Green chilli 
                                    [price] => 100.00
                                )

                        )

                    [quantity] => 1
                    [price_per_item] => 750
                )

            [1] => Array
                (
                    [item_id] => 16
                    [item_name] => Cheesy Garlic Bread
                    [price] => 420.00
                    [quantity] => 1
                    [price_per_item] => 420
                )

        )
  

Код контроллера:-

В моем контроллере я создал следующую функцию для remove each item . чего мне здесь не хватает?

/Cart/удалить

 public function remove($id){
        $this->load->library('session');
        $list = $this->session->userdata('cart_items');
        if($list){
            foreach ($list as $item=>$value){
                if($id==$value['item_id']){
                    $this->session->unset_userdata($value);
                }
            }
        }
        redirect('Cart/index');

    }
  

На мой взгляд, именно так я передаю идентификатор товара в теге привязки.

Вид:-

 <?php $list = $this->session->userdata('cart_items');
        $grand_total=0;
        if($list==Null) {
            print_r("<div><li class='list-group-item d-flex justify-content-between lh-condensed'>There are no items in the your cart</li></div>");
            $sub_total=0;
        }else{
            $sub_total=0;
            foreach ($list as $item=>$value){
                echo "<li class='list-group-item d-flex justify-content-between lh-condensed'>";
                if($value['item_id']<16) {

                    print_r("<div>" . $value['item_id'] . "</div>");
                    print_r("<div>" . $value['item_name'] . "</div>");
                    print_r("<div>" . $value['price'] . "</div>");

                    // toppings array is empty 
                    $toppings_price = 0;
                    if ($value['toppings'] == null) {
                        print_r("<div>No toppings selected</div>");
                    } else {
                        foreach ($value['toppings'] as $val) {
                            // printing topping names
                            print_r("");
                            print_r($val['name']);
                            print_r(",");
                            $toppings_price = $toppings_price   $val['price'];
                        }
                    }

                }else{
                    print_r("<div>" . $value['item_id'] . "</div>");
                    print_r("<div>" . $value['item_name'] . "</div>");
                    print_r("<div>" . $value['price'] . "</div>");
                }

                print_r("<div>".$value['quantity']."</div>");
                print_r("<div><a href='".base_url()."index.php/Cart/remove/".$value['item_id']."' class='btn btn-danger'>Remove</a></div>");
                echo "</li>";

                //sub total
                if($value['item_id']<16){
                    $sub_total =($value['price']*$value['quantity']) $toppings_price;
                }else{
                    $sub_total =($value['price']*$value['quantity']);
                }
            }
        }
        $grand_total = $sub_total;
        ?>
  

Когда я нажал на кнопку «удалить», он загружается на ту же страницу, но строка элемента не удаляется.

Комментарии:

1. Где именно находится ваша remove item функция??

2. print_r("<div><a href='".base_url()."index.php/Cart/remove/".$value['item_id']."' class='btn btn-danger'>Remove</a></div>"); Вот моя кнопка удаления в представлении, а функция удаления товара находится в контроллере корзины.

3. Вам нужно добавить код /Cart/remove функции к вашему вопросу, чтобы мы могли видеть, что происходит

4. добавлен код @BurhanKashour /Cart/remove

5. @Natasha Bharathi ваша проблема решена?

Ответ №1:

Это потому, что ваши пользовательские данные — это не сами значения, а массив, содержащий их. Вам нужно удалить товар из массива, а затем сохранить массив как новые пользовательские данные. Попробуйте что-то вроде этого:

 public function remove($id){
  $this->load->library('session');
  $list = $this->session->userdata('cart_items');

  if($list){
    foreach ($list as $item=>$value){
      if($id==$value['item_id']){
        unset($list[$item]);
        $list = array_values($list); // optional, reindex the array.
        break;
      }
    }

    $this->session->set_userdata('cart_items', $list);
  }

  redirect('Cart/index');

}
  

Ответ №2:

 public function remove($id){
        $this->load->library('session');
        $list = $this->session->userdata('cart_items');
        if($list){
            foreach ($list as $item=>$value){
                if($id==$value['item_id']){
                    $this->session->unset_userdata($value['item_id']);
                }
            }
        }
        redirect('Cart/index');

    }
  

Просмотр кода:-

 <td>
<a href="<?= base_url().'user/remove/'.$value['item_id']; ?>">
  <button>REMOVE</button>
</a>
</td>
  

уничтожить или отменить значение сеанса?

  $this->session->unset_userdata('some_name');
  

и для нескольких данных вы можете:-

 $array_items = array('username' => '', 'email' => '');

$this->session->unset_userdata($array_items);
  

и для уничтожения сеанса:-

 $this->session->sess_destroy();
  

Примечание: — Для получения дополнительной информации о классе сеанса в Codeigniter,

https://codeigniter.com/userguide3/libraries/sessions.html

Комментарии:

1. Я здесь не использую библиотеку корзины, и все мои товары находятся в массиве сеансов, как показано выше, как я могу удалить каждый элемент из сеанса?