Удаление товара с корзины
Я написал корзину для магазина, но возникла проблема: при нажатии на иконку удаления товара с корзины ничего не происходит.
<?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'];
});
}