gpt4 book ai didi

php - while 循环内的 foreach 返回重复数据

转载 作者:行者123 更新时间:2023-11-29 10:12:49 25 4
gpt4 key购买 nike

上下文:我有一个订购表单,其中有一个 html 选择和一个数字输入。因此,用户选择该项目并输入他们想要该项目的数量,这些将作为数组发送到处理页面。 $_POST['item']; 是一个 id 数组,我想用它从数据库中选择产品信息。 $amount = $_POST['amount']; 只是每个项目的金额数组。

问题:每一行都根据行数进行重复,因此在本例中它返回三行,但每行都重复三次。

目标:我想做的就是 foreach $_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>

最佳答案

我不太确定您要做什么,但您正在重新分配

$key = array() ;

紧接着您

foreach ($amount as $key) 

这导致了你

<td><?php echo $key;?></td>

尝试回显数组,因为您覆盖了 foreach 分配的 $key 的值。

您的帖子没有详细说明哪些数据被重复,所以我无法在这个答案中真正解决这个问题。

您正在复制相同的三行,因为您正在设置

$new = array_combine($item, $amount);

然后你的 SQL 正在抓取行

$stmt = $dbh->query('SELECT * 
FROM `products`
WHERE `id` IN (' . $each . ')');

然后您将使用循环遍历相同的项目

foreach ($new as $key => $val) {

如果您想显示在​​ SQL 中找到的项目,那么您不应该使用

foreach ($new as $key => $val) {

在 while() 循环内。您的 while() 已经循环遍历为这些项目返回的行。这假设每个商品编号只有一件产品。

如果您希望为每个商品编号返回一个或多个“产品”,那么您应该在循环 foreach($new) 时执行 SQL,但这似乎并非如此代码的顶部部分在做什么。

经过反复讨论,我们发现了问题:金额需要与商品编号 Hook 。

您将从 HTML 中以数组形式获取商品编号和数量。因此,您需要循环遍历这些项目并将它们与您的数量相关联。

// where your qualities will live
$quantities = array() ;

// loop through the array of items you received and match them up with their quantity
foreach($item as $k=>$id) {
$quantities[$id] = $amount[$k] ;
}

然后您可以使用以下方法访问 while 循环中的数量:

$row['quantity'] = $quantities[$row['id']] ;

关于php - while 循环内的 foreach 返回重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com