上下文:我有一个排序表单,它有一个html select和一个数字输入。因此,用户选择项目并输入他们想要的项目数量,这些将作为数组发送到hander页面。 $_POST['item'];
是一个id数组,我想用它从数据库中选择产品信息。 $amount = $_POST['amount'];
只是每个项目数量的数组。
问题:每一行都是按行的数量复制的,所以在本例中,它返回三行,但每一行重复三次。
目标:我要做的就是 $_POST['item']
从数据库中获取这些行的数据,并在表中显示它们和相应的数量,这样用户就可以确认顺序。
句柄.php
<?php
$item = $_POST['item']; // array of product ids to select data from db
$amount = $_POST['amount']; // array of amounts of each product the user ordered
$note = $_POST['note'];
$i = 0;
$each = implode(',',$item);
$stmt = $dbh->query('SELECT *
FROM `products`
WHERE `id` IN (' . $each . ')');
<table class="table">
<thead>
<tr>
<th scope="col">Item</th>
<th scope="col">Quantity</th>
<th scope="col">Price</th>
</tr>
</thead>
<tbody>
<?php
while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {
$product_id = $row['id'];
$product_name = $row['name'];
$product_price = $row['price'];
$row['quantity'] = $amount[$row['id']];
print "<pre>";
print_r($row);
print "</pre>";
?>
<tr>
<td><?php echo $product_name;?></td>
<td><?php echo $row['quantity'];?></td>
<td><?php echo $product_price;?></td>
</tr>
<?php } ?>
</tbody>
</table>
1条答案
按热度按时间g6ll5ycj1#
我不确定你想做什么,但你正在重新分配任务
在你的
那会导致你
试图回显数组,因为您重写了foreach指定的$key的值。
你的帖子没有详细说明什么数据被复制,所以我不能在这个答案中真正解决这个问题。
您正在复制相同的三行,因为您正在设置
然后您的sql正在获取行
然后你就在同一个项目上循环
如果要显示在sql中找到的项,则不应使用
在while()循环中。while()已在为这些项返回的行上循环。这假设每个项目编号只有一个产品。
如果您希望为每个项目编号返回一个或多个“产品”,那么您应该在循环foreach($new)时执行sql,但这似乎不是代码顶部所做的。
经过一番反复,我们已经确定了问题:金额需要与项目编号挂钩。
您将从html中获取项目编号和数量作为数组。因此,您需要循环遍历这些项目,并将它们与您的数量相关联。
然后可以使用以下方法访问while循环中的数量: