0

尝试呈现来自数组的一些信息时遇到问题。

我有一个foreach检查n站点中的会话,然后我为每个会话调用数据库并加载一组项目。

出来后foreach,我想按顺序使用相同的数组来一次一个地显示项目,但是我只看到最后一个项目的n时间。

本质上,在第二个foreach中,$row2['name']and$row2['price']仅显示n次数,但始终显示表的最后一项。

foreach ($_SESSION['cart'] as $item) 
{ 
$pid = $item['itemId'];
$q = $item['qty'];
if($q==0) continue;
$query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem");
$query2-> bindValue (':idItem',$pid);
$query2->execute();
$row2 = $query2->fetch(PDO::FETCH_ASSOC);
SOME HTML STUFF....
}

这里有一些独立的 HTML 内容:

foreach ($_SESSION['cart'] as $item)    
{
   $pid = $item['itemId'];
   $q = $item['qty'];
HTML <div class="subTotalItem">
   <span class='cartItemsText'><?php echo **$row2['name']**; ?></span>
<span class='cartItemsText2'><?php echo $q." x "." $".$**row2['price'];** $subTotal+= $row2['price'] * $q; ?></span>
    </div>
}

知道问题可能出在哪里吗?

4

4 回答 4

2

将您的“稍后显示的内容”存储在一个字符串中,并在您需要的地方回显它。

$subtotalStuff = "";

foreach ($_SESSION['cart'] as $item) { 
    $pid = $item['itemId'];
    $q = $item['qty'];
    if($q==0) continue;

    $query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem");
    $query2-> bindValue (':idItem',$pid);
    $query2->execute();
    $row2 = $query2->fetch(PDO::FETCH_ASSOC);

    $subtotalStuff .= "<div class='subTotalItem'><span>" . $row2['name'] . "</span><span>" . $q . " x " . " $" . row2['price'] . "</span></div>\r\n";
    $subTotal+= $row2['price'] * $q;

    SOME HTML STUFF....
}

echo $subtotalStuff;
echo $subTotal;
于 2013-04-09T20:34:01.633 回答
0

将 PDO 配置为 PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY 的准备好的语句的默认选项不是吗?如果我是对的,那意味着您必须再次运行相同的查询来编写代码的 HTML 部分。

我没有可逆光标的经验,但有一个选项。

于 2013-04-09T20:27:58.620 回答
0

我只能假设您以某种方式在您省略的“SOME HTML STUFF”部分中的某处设置了 $_SESSION['cart'] 变量。我这样说是因为查看您的代码,我希望 $_SESSION['cart'] 对于第二个 foreach 具有与第一个 foreach 相同的确切值。

于 2013-04-09T20:30:37.203 回答
0

您应该在与查询相同的循环中打印出来, $row2 每次通过循环时都会重置。

foreach ($_SESSION['cart'] as $item) 
{ 
 $pid = $item['itemId'];
$q = $item['qty'];
if($q==0) continue;
$query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem");
$query2-> bindValue (':idItem',$pid);
$query2->execute();
$row2 = $query2->fetch(PDO::FETCH_ASSOC);

SOME HTML STUFF....


Put your HTML output here, not in second loop

 }

这应该工作

于 2013-04-09T20:31:00.493 回答