2017-09-02 6 views
1

商品IDを使用する代わりに、カート内の各商品のインデックスは0から始まります。カート内の各商品には、カート内のボタンの削除/削除ボタンがあります。そのボタンをクリックすると、値がPHPスクリプトにAJAXを経由して掲載されます。商品はカートから削除されません

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

     } 
    } 

私はクリックで()indexToRemoveをCONSOLE.LOG場合は、コンソールに正しい値を示しています。ただし、アイテムはセッションから削除されることはなく、コンソールにはトラブルシューティングに役立つエラーはありません。ここで

jQueryのです:次のようにする必要があり、クライアント側では

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

答えて

0

$("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); 
     }) 
    }) 

は、カートのコードに追加:カートのアイテムを示すため

$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コードを次の行を変更してください:

data: { 
    indexToRemove: indexToRemove 
}, 

に:

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

代わりに、サーバ側の第1の問題は、次のとおりに

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

変化を:

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

アイテムがJSONであるため、第二は、(あります必要なオブジェクトjson_decode):

$key_to_remove = $_POST['indexToRemove']; 

変更を:

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

私は1つのアイテムを持っている場合、それは私はあなたが求めているかどうか確認する方法がわからない作品とアイテムが – user8463989

+0

削除されます。私がconsole.log()をindexToRemoveから外した場合、最初のカートアイテムの値は0、Seanceアイテムの値は1、2番目のアイテムの値は – user8463989

+0

@ user8463989です。PHPで$ key_to_removeの値をダンプできますか?あなたの配列とキーが有効であるかどうかテストします私が** $ key = "{$ product_id}。{$ color}。{$ size}"; **を見て、これが数字ではないと思ったからです。 – gaetanoM

関連する問題