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

Я написал корзину для магазина, но возникла проблема: при нажатии на иконку удаления товара с корзины ничего не происходит.

<?php




if ( isset($_GET['delete_id']) && isset($_SESSION['cart_list']) ) {
foreach ($_SESSION['cart_list'] as $key => $value) {
    if ( $value['id'] == $_GET['delete_id'] ) {
        unset($_SESSION['cart_list'][$key]);
    }       
 }
}



if ( isset($_GET['single_id']) && !empty($_GET['single_id']) ) {

$current_added_good = get_single_by_id($_GET['single_id']);

if ( !empty($current_added_good) ) {

    if ( !isset($_SESSION['cart_list'])) {
        $_SESSION['cart_list'][] = $current_added_good;
    }


    $single_check = false;

    if ( isset($_SESSION['cart_list']) ) {
        foreach ($_SESSION['cart_list'] as $value) {
            if ( $value['id'] == $current_added_good['id'] ) {
                $single_check = true;
            }
        }
    }


    if ( !$single_check ) {
        $_SESSION['cart_list'][] = $current_added_good;
    }

} else {
    
}

}
?>
<?php require_once 'header.php'; ?>
<br>


<main>
<div class="container">
<div class='cart'>
<section class='text-center mb-4'>
<div class='row'>

<?php if ( isset($_SESSION['cart_list']) && count($_SESSION['cart_list']) !=0 ) : ?>
<br>
<?php foreach( $_SESSION['cart_list'] as $single ) : ?>

<div class='col-3 mb-5'>
    <div class='card'>
      <div class='view overlay'>
      <div class='qwe'>
      <img class='card-img-top' src='/img/products/<?php echo $single['img'];?>.jpg'>
      </div>
        <a href='/product.php?id=<?php echo $single['id'];?>'>
          <div class='mask rgba-white-slight'></div>
        </a>
      </div>
      <div class='card-body text-center'>
        <a href='/product.php?id=<?php echo $single['id'];?>' class='grey-text'>
        <div class='title'><h5><?php echo $single['title'];?></h5></div>
        </a>
        <br>
        <h5>
          <strong><?php echo $single['brand'];?>
            <a href='/categories.php'><br>
            <span class='badge red mr-1'>
            <?php echo $single['category'];?>
            </span>
            </a>
          </strong>
        </h5>
        <h4 class='font-weight-bold blue-text'>
          <strong><?php echo $single['price'];?></strong>
        </h4>
        <a href="cart.php?delete_id=<?php echo $single['id'];?>"><i class='fas fa-times' style='color: Red'></i></a>
        
     </div>
    </div>
  </div>
  
    <?php endforeach; ?>
 </div>
</section>
</div>
</div>
<hr><section class='text-center mb-4 text-success font-weight-bold display-4'>
<span id="totalPrice ">0</span>
</section>
<br>
<a href="index.php"><button type="button" class="btn btn-primary"> Продолжить покупки </button></a> 
<br> <br>
<a href='order.php'><button type='button' class='btn btn-primary btn-block'>Купить</button></a>
<br> <br> <br> <br>

<?php else : ?>
<div class='empty'>
<p><br><br> <br><br> <br><br> <br> <br> 
    <h1>Ваша корзина пуста</h1>
</p>
<br><br><br><br><br><br> <br><br> 
</div>
<?php endif; ?>

<br>
</main>


</div>

<?php require 'footer.php'; ?>

Ответы (1 шт):

Автор решения: DVirt

К сожалению, имеется случае НЕ явно поведение unset, более детально в комментариях: https://www.php.net/manual/ru/function.unset.php

Лучше сделайте вот так:

$_SESSION['cart_list'] = array_filter($_SESSION['cart_list'], function($v) {
   return $v['id'] != $_GET['delete_id'];
});
// Вместо этого:
if ( isset($_GET['delete_id']) && isset($_SESSION['cart_list']) ) {
foreach ($_SESSION['cart_list'] as $key => $value) {
    if ( $value['id'] == $_GET['delete_id'] ) {
        unset($_SESSION['cart_list'][$key]);
    }       
 }
}

// Вставить вот это:
 session_start();

if ( isset($_GET['delete_id']) && isset($_SESSION['cart_list']) ) {
  $_SESSION['cart_list'] = array_filter($_SESSION['cart_list'], function($v) {
     return $v['id'] != $_GET['delete_id'];
  });
}
→ Ссылка