2016-12-14 2 views
1

カートと呼ばれるテーブルからすべての製品を表示する必要があります。しかし、テーブルに何個の製品があるにしても、json_decodeは常にユーザー側で1つの製品の配列を返します(var_dumpを確認してください)。ユーザーは、最後に追加された商品のみを表示できます。 jsonはテーブルの最後の行のみを表示します。私はすべての製品を表示する必要があります。私はこのアプリケーションをデバッグするために多くのことを試しましたが、私は完全にjsonの機能を理解していないと思います。json_decode mysqliで1の配列を返します

のvar_dump($アイテム):array(1) { [0]=> array(4) { ["id"]=> string(2) "14" ["size"]=> string(1) "0" ["quantity"]=> string(1) "1" ["available"]=> string(1) "1" } }

cart.php

<?php 
if($cart_id !=''){ 
    $cartQ = $db->query("SELECT * FROM cart WHERE id ='{$cart_id}' "); 
    $result = mysqli_fetch_assoc($cartQ); 
    $items = json_decode($result['items'],true); 
    $i = 1; 
    $sub_total = 0; 
    $item_count = 0; 
} 
?> 
    <?php 
       foreach($items as $item){ 

       var_dump($items); 
        $product_id = $item['id']; 
        $productQuery = $db->query("SELECT * FROM product WHERE id ='{$product_id}' "); 
        $product = mysqli_fetch_assoc($productQuery); 

       ?> 

     <tr class="p"> 
    <td class="image"><img src="<?=$product['image_1'];?>" /></td> 
    <td class="name"><?=$product['prod_name'];?></td> 
    <td class="price"><?=money($product['price']);?></td> 
    <td class="quantity"> <?=$item['quantity'];?></td> 
    <td class="pricesubtotal"><?=money($item['quantity'] * $product['price']);?></td> 
    <td class=""><div><button name='removeitem' onclick="update_cart('removeitem','<?=$product_id['id'];?>');">&times</button></div></td> 
    </tr> 
    <?php endif;?> 

答えて

0

あなたはたくさんのあなたのデータに問題があります。まず第一に、あなたはjsonとしてアイテムを保存するべきではありません。または少なくとも、jsonオブジェクト内にアイテムIDを保存しないでください。それで、あなたはINNER JOINという名誉ある時間を利用して、最小限のコードで非常に簡単に、すべての製品を簡単に手に入れることができます。

SELECT * FROM products INNER JOIN cart on cart.item_id = product.id 
WHERE cart.id = ? 

補足として、クエリには文字列連結の代わりにprepared statementを使用する必要があります。

+0

あなたの意見をお寄せいただきありがとうございます...私はあなたが何を言っているのか理解しており、今どこからエラーが出ているのかを見ています。基本的にjsonはこの場合役に立たず... idと他のすべてのために別々の列を作成する必要があります。 – Waterfalls

+0

はい、それはかなりそれを要約します。古い回答には、標準のカートテーブルデザインがたくさんあります – e4c5

関連する問題