2017-09-02 4 views
1

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); 
} 

Antwort

0

Auf dem Client-Seite müssen Sie Ändern Sie diese Zeile:

data: { 
    indexToRemove: indexToRemove 
}, 

zu:

data: JSON.stringify({indexToRemove: indexToRemove}), 

Statt sich auf Server-Seite die erste Ausgabe ist:

unset($_SESSION['cart_array']["$key_to_remove"]); 
          ^   ^

Änderung es zu:

unset($_SESSION['cart_array'][$key_to_remove]); 

Die zweite ist (da das Element ein json ist Objekt, das Sie benötigen json_decode):

$key_to_remove = $_POST['indexToRemove']; 

Änderung es zu:

$key_to_remove = json_decode($_POST['indexToRemove']); 
+0

Wenn ich es funktioniert nur 1 Punkt haben dann und das Element entfernt wird – user8463989

+0

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

+0

@ 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

Verwandte Themen