Anstatt die Produkt-ID zu verwenden, habe ich einen Index für jeden Artikel im Warenkorb, der bei 0 beginnt. Jeder Artikel im Warenkorb hat seine eigene Schaltfläche "Warenkorb entfernen/löschen". Wenn diese Schaltfläche geklickt wird, wird der Wert über Ajax zu einem PHP-Skript geschrieben:Artikel wird nicht aus dem Einkaufswagen entfernt
if(isset($_POST['indexToRemove']) && $_POST['indexToRemove'] !== "") {
$key_to_remove = $_POST['indexToRemove'];
if(count($_SESSION['cart_array']) <=1) {
unset($_SESSION['cart_array']);
} else {
unset($_SESSION['cart_array'][$key_to_remove]);
}
}
Wenn ich() indexToRemove auf Klick console.log, es den richtigen Wert in der Konsole zeigt. Das Element wird jedoch nie aus der Sitzung entfernt und es gibt keinen Fehler in der Konsole, um die Fehlerbehebung zu erleichtern. Hier
ist die jQuery:
$("body").on("click", ".removeItem", function() {
var indexToRemove = $(this).data('itr');
var div = $(this).parents("div.hr");
$.ajax({
url: 'functions/show-cart.php',
type: 'POST',
dataType: 'json',
data: {
indexToRemove: indexToRemove
},
beforeSend: function() {
$(div).html("<img src='images/spinner.gif'>");
$("#total").empty();
},
})
.done(function (data) {
$(div).fadeOut();
show_cart();
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.log(textStatus + ': ' + errorThrown);
console.warn(jqXHR.responseText);
})
})
In den Warenkorb Code:
$quantity = 1;
$product_id = $_POST['id'];
$colour = $_POST['colour'];
$size = $_POST['size'];
$key = "{$product_id}.{$colour}.{$size}";
if (empty($_SESSION['cart_array'][$key])) {
$_SESSION['cart_array'][$key] = array(
"item_id" => $product_id,
"quantity" => $quantity,
"colour" => $colour,
"size" => $size,
);
}
else {
$_SESSION['cart_array'][$key]['quantity'] += $quantity;
}
PHP-Code zur Darstellung der Warenkorb Artikel:
if(!isset($_SESSION['cart_array'])) {
$itemsInCart = 0;
$response['total'] = 0;
echo json_encode($response);
} else {
$featured = "Yes";
$i=0;
foreach($_SESSION['cart_array'] as $each_item) {
$item_id = $each_item['item_id'];
$colour = $each_item['colour'];
$size = $each_item['size'];
$stmt = $link->prepare("SELECT `product_name`, `price`, `pic_name` FROM `products` as `p` INNER JOIN `product_images` as `pi` ON p.`id` = pi.`product_id` WHERE p.`id` = ? AND `featured` = ?");
$stmt->bind_param("is", $item_id, $featured);
$stmt->execute();
$result = $stmt->get_result();
$numRows = $result->num_rows;
if($numRows > 0) {
while($row = $result->fetch_assoc()) {
$product_name = sanitize($row['product_name']);
$price = sanitize(money_format('%.2n', $row['price']));
$subtotal = money_format('%.2n', $each_item['quantity'] * $price);
$pic_name = $row['pic_name'];
$cartTotal = $subtotal + $cartTotal;
$quantity = $each_item['quantity'];
$cart_details[] = array(
"product_name" => $product_name,
"price" => $price,
"subtotal" => $subtotal,
"pic_name" => $pic_name,
"each_item" => $quantity,
"item_id" =>$item_id,
"i" => $i,
"colour" => $colour,
"size" => $size,
);
$i++;
}
}
$stmt->close();
}
$response['total'] = $cartTotal;
$response['cart'] = $cart_details;
echo json_encode($response);
}
Wenn ich es funktioniert nur 1 Punkt haben dann und das Element entfernt wird – user8463989
Ich weiß nicht, wie zu überprüfen, was Sie fordern. Wenn ich den indexToRemove-Befehl console.log() austrage, hat der erste Warenkorb-Eintrag den Wert 0, der Wert des zweiten Eintrags den Wert 1, der dritte Eintrag den Wert 2 usw. – user8463989
@ user8463989 Entschuldigung, können Sie in PHP den Wert Ihres $ key_to_remove ausgeben , und das gleiche für Ihr Array und testen, ob der Schlüssel gültig ist? Der Grund ist, weil ich ** $ key = "{$ product_id}. {$ Color}. {$ Size}" gesehen habe; ** und ich nehme an, das ist keine Nummer. – gaetanoM