Updating the quantity of a product with AJAX has a problem
I have a weird problem with using AJAX for the quantity increase of products.
This problem only exists with having more than 1 product on the same cart page.
Let's say there are 2 products. And the product order is ordered by product ID high to low.
If I increase the quantity of the first product in the list it will succeed to increase the quantity. If I then increase the second product quantity it will succeed to increase.
But if I choose the second product to begin with and increase the quantity it doesn't work, the alert then shows still the old quantity(see Jquery AJAX code).
The same happens when I have 3 products etc.
The quantity only updates if I change the quantity from UP to DOWN the list so from the HIGHEST ID to the lower ID.
I don't understand why it behaves like that and I tried a lot but nothing helped.
Can someone explain to me why the code behaves like this and how this can be fixed?
PHP update_quantity.php
<?php session_start(); include('config/database_connection.php'); // get the product id echo $id = isset($_GET['id']) ? $_GET['id'] : 1; echo $quantity = isset($_GET['quantity']) ? $_GET['quantity'] : ""; // make quantity a minimum of 1 $quantity=$quantity<=0 ? 1 : $quantity; // remove the item from the array unset($_SESSION['cart'][$id]); // add the item with updated quantity $_SESSION['cart'][$id]=array( 'quantity'=>$quantity ); ?>
cart.php where quantity can get updated
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { extract($row); echo "<form class='update-quantity-form'>"; echo "<div class='product-id' style='display:none;'>{$id}</div>"; echo "<div class='input-group'>"; echo "<input type='number' name='quantity' value='{$quantity}' class='form-control cart-quantity' min='1' />"; echo "<span class='input-group-btn changeUpdateButton'>"; echo "<button href='{$id}' class='btn update-quantity' type='submit'>Update</button>"; echo "</span>"; echo "</div>"; echo "</form>"; }
Jquery AJAX update quantity
$(document).ready(function(){ //Add to cart PRODUCT selected code $(".update-quantity").click(function(e){ var id = $(this).attr("href"); var quantity = $('.update-quantity-form').find('.cart-quantity').val(); $.ajax({ url: "update_quantity.php", type: "GET", //send it through get method data: { id: id, quantity: quantity, }, success: function(response) { alert(response); }, error: function(xhr) { //Do Something to handle error } }); }); });
Code with what I used BEFORE using Jquery AJAX, which works
// update quantity button listener $('.update-quantity-form').on('submit', function(){ // get basic information for updating the cart var id = $(this).find('.product-id').text(); var quantity = $(this).find('.cart-quantity').val(); // redirect to update_quantity.php, with parameter values to process the request window.location.href = "update_quantity.php?id=" + id + "&quantity=" + quantity; return false; }); ```