2014-02-14 2 views
0

Я хочу, чтобы отобразить список продуктов, но в выходном браузере этот код отображается только последний продукт и не обращая внимания на предыдущие пункты:Корзинка отображается только один пункт

<?php 
    $cartOutput=""; 
    if(!isset($_SESSION["cart_array"])|| count($_SESSION["cart_array"])<1){ 
$cartOutput="<h2 align='center'>Your shopping cart is empty</h2>"; 
    }else{ 
$i=0; 
foreach($_SESSION["cart_array"] as $each_item){ 
    $i++; 
    $cartOutput="<h2>Cart Item $i</h2>"; 
     $cartOutput="Item ID:" .$each_item['item_id']."<br>"; 
    $cartOutput="Item Quantity:" .$each_item['item_id']."<br>"; 
    //while(list($key,$value)=each($each_item)){ 
     //$cartOutput="item_id: $pid <br> $key: $value<br/>"; 
    //} 
     } 
     } 
     ?> 

и здесь HTML

<body> 
    <div align="center" id="mainWrapper"> 
    <?php include_once("template_header.php");?> 
    <div id="pageContent"> 
    <div style="margin:24px; text-align:left;"> 
    <?php echo $cartOutput ?> 
    <br /><br /> 
    <a href="cart.php?cmd=emptycart">Click Here to Empty Your Shopping Cart</a> 
    </div> 
    <br /> 
    </div> 
    <?php include_once("template_footer.php");?> 
    </div> 
    </body> 
    </html> 

ответ

1

Это потому, что вы перезаписать переменный $ cartOutput каждый раз, когда ваш работает цикл по каждому элементу. Это означает, что отображается только последний элемент вашей тележки. Вы можете исправить это путем добавления к $ cartOutput или путем создания массива и последующего его последующего его последующего.

Как это (с использованием взрываться):

<?php 
$cartOutput=array(); 
if(!isset($_SESSION["cart_array"])|| count($_SESSION["cart_array"])<1){ 
    $cartOutput="<h2 align='center'>Your shopping cart is empty</h2>"; 
}else{ 
    $i=0; 
    foreach($_SESSION["cart_array"] as $each_item){ 
     $i++; 
     $cartOutput[] = "<h2>Cart Item $i</h2>"; 
     $cartOutput[] = "Item ID:" .$each_item['item_id']."<br>"; 
     $cartOutput[] ="Item Quantity:" .$each_item['item_id']."<br>"; 
    } 
    $cartOutput = implode('<br />', $cartOutput); 
} 
?> 

В качестве альтернативы вы можете просто добавить вывод на уже просуществовавшего выход в $ cartOutput так:

<?php 
$cartOutput=""; 
if(!isset($_SESSION["cart_array"])|| count($_SESSION["cart_array"])<1){ 
    $cartOutput="<h2 align='center'>Your shopping cart is empty</h2>"; 
}else{ 
    $i=0; 
    foreach($_SESSION["cart_array"] as $each_item){ 
     $i++; 
     // note the use of .= which is a combined assignment and concatenation operators (it concatenates all content after the .= to the string preceding it) 
     $cartOutput .= "<h2>Cart Item $i</h2>"; 
     $cartOutput .= "Item ID:" .$each_item['item_id']."<br>"; 
     $cartOutput .="Item Quantity:" .$each_item['item_id']."<br>"; 
    } 
} 
?> 
+0

второе решение wokred отлично спасибо – user3306847

1

Вы возвращаете значение cartOutput каждый раз, когда оператор while проходит через итерацию. Так внутри изменения итерации $ cartOutput = «....» до $ cartOutput. = «....»

<?php 
$cartOutput=""; 
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) { 
    $cartOutput="<h2 align='center'>Your shopping cart is empty</h2>"; 
} else { 
    $i=0; 
    foreach($_SESSION["cart_array"] as $each_item) { 
     $i++; 
     $cartOutput .= "<h2>Cart Item $i</h2>"; 
     $cartOutput .= "Item ID:" .$each_item['item_id']."<br>"; 
     $cartOutput .= "Item Quantity:" .$each_item['item_id']."<br>"; 
    } 
} 
?> 
Смежные вопросы