Удаление элемента массива из 2D-массива, хранящегося в $ _SESSION в PHP - PullRequest
0 голосов
/ 17 марта 2020

Я использую PHP и mySQL для создания простой корзины покупок. Товары можно добавить в корзину, но моя функция «удалить элемент из корзины» не работает.

Я использую массив, хранящийся как переменную $_SESSION, для хранения элементов корзины. Каждый элемент корзины также будет массивом, содержащим три элемента (имя, изображение sr c, id). При удалении элемента для корзины его идентификатор передается в мой файл removeFromCart. php, где я вызываю поиск по массиву, чтобы получить значение ключа удаляемого элемента, а затем пытаюсь удалить этот элемент, используя unset(). * 1007. *

Я считаю, что это правильный подход, поскольку я не хочу удалять по index, а по значению ключа (соответствует продукту id). Тем не менее, элемент массива на самом деле не 'unset' из моей переменной $_SESSION['cart']. Код следует:

Фрагмент кода со страницы продукта:

<?php session_start();?>

<div class="product-description">
    <h3 class="product-name">Columbia</h3>
    <img src="flags/columbia.gif" alt=""Columbia Ntional Flag">
    <p class="product-price">&dollar;15</p>
    <a href="addToCart.php? id=1">Add to Cart</a>
</div>
<div class="product-description">
    <h3 class="product-name">Mexico</h3>
    <img src="flags/mexico.gif"  alt="Mexico National Flag" >
    <p class="product-price">&dollar;15</p>
    <a href="addToCart.php? id=2">Add to Cart</a>
</div>

Код от addToCart. php:

<?php

session_start();

if(empty($_SESSION['cart'])) {
    $_SESSION['cart'] = array();
}

array_push($_SESSION['cart'], $_GET['id']);

?>

Фрагмент страницы из корзины:

<?php session_start(); ?>

$items = implode(',', $_SESSION['cart']);   //get items stored in cart 

$result = mysqli_query($conn,"SELECT name, image, id FROM products WHERE id in ($items)");

    $incart = mysqli_fetch_all($result);

    if (!$incart){
        $cartName = "Your Shopping Cart is Empty.";
        $cartImage = '';
    }

foreach ($incart as $cartitem)
echo "
    <table style=\"width:100%; border: 1px solid black; text-align: center\">
    <tr>
        <th style=\"background-color: goldenrod\">Product Name</th>
        <th style=\"background-color: goldenrod\">Image</th>
        <th style=\"background-color: goldenrod\">Remove</th>
    </tr>
    <tr>
        <td style=\"font-size: x-large\"> $cartitem[0] </td>
        <td> 
        <img style= \"width: 250px\" src= \"$cartitem[1]\"> 
        </td>
        <td> 
        <a href='removeFromCart.php? id=$cartitem[2]'>Remove Item</a>
        </td>
        </tr>
        </table>

";
var_dump($incart);
echo "<br>";                   //used to confirm arrays identiical to before 
var_dump($_SESSION['cart']);   // remove item was clicked
echo "<br>";                  
?>

Код от removeItem. php:

<?php

session_start();

$key = array_search($_GET['id'], $_SESSION['cart']);

unset($_SESSION['cart'[$key]]);

header("Refresh:10 url=cart.php");

var_dump($key);          //confirms correct key value 
echo "<br>";
var_dump($_GET['id']);   // confirms correct array element 

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

На вашей странице removeItem.php есть опечатка:

Измените следующую строку:

unset($_SESSION['cart'[$key]]);

На

unset($_SESSION['cart'][$key]);
0 голосов
/ 17 марта 2020

РАЗРЕШЕНО: Действительно, я действительно хотел использовать array_splice () вместо unset (). Исправленный код для removeItem ниже:

<?php

session_start();

$key = array_search($_GET['id'], $_SESSION['cart']);

array_splice($_SESSION['cart'], $key, 1);

header("Location: =cart.php");

...