我在尝试提供来自阵列的一些信息时遇到了问题。
我有foreach
检查我网站中的n
会话,然后我为每个会话调用数据库并加载一系列项目。
从foreach
出来之后,我想依次使用相同的数组逐一显示项目,但我只看到最后一项n
次。 / p>
基本上,在第二个foreach
中,$row2['name']
和$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>
}
知道问题可能在哪里?
答案 0 :(得分: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;
答案 1 :(得分:0)
不是PDO配置为PDO的预准备语句的默认选项:: ATTR_CURSOR =&gt; PDO :: CURSOR_FWDONLY?如果我是对的,那意味着你必须再次运行相同的查询来编写代码的HTML部分。
我没有使用可逆游标的经验,但它有一个选项。
答案 2 :(得分:0)
我只能假设您在省略的“SOME HTML STUFF”部分中某处设置了$ _SESSION ['cart']变量。我这样说是因为查看你的代码,我希望$ _SESSION ['cart']与第一个foreach的第二个foreach具有相同的确切值。
答案 3 :(得分: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
}
这应该有效