Post 方法仅发布从数据库中获取的最后一个值

Post Method only posting last value fetched from database

我在一页上显示数据库中的项目列表(多个条目)。我正在尝试 post 从数据库中获取的所有这些值到另一个 php 文件以将项目添加到购物车。

但是当我为列表中的任何项目按下 'add to cart' 按钮时,它只会通过 POST 发送最后一项。我知道这是因为 while 循环,但我不知道正确的实现方式?


<form action="php/addToCart.php" method= "POST">
    <?php
        while($product=mysqli_fetch_assoc($featured)):
    ?>
    <div class="col-md-5">
        <h4><?= $product['title'] ?></h4>
        <image src="php/marketplace_images/<?= $product['image'];?>" alt="<?= $product['title'];?>" height="300" width="300"/>
        <p class="lprice"> Price $ <?= $product['price'];?></p>
        <p class="desc"> Description: <?= $product['description'];?></p>
        <p class="bname"> Brand Name: <?= $product['brandname'];?></p>

        <input name="title" type="hidden" value="<?= $product['title'] ?>" />
        <input name="price" type="hidden" value="<?= $product['price'] ?>" />
        <input name="brandname" type="hidden" value="<?= $product['brandname'] ?>" />
        <input name="image" type="hidden" value="<?= $product['image'] ?>" />
        <input name="featured" type="hidden" value="<?= $product['featured'] ?>" />
        <button type="submit" class="btn btn-success" data-toggle="modal" name="add">Add To Cart</button>      
                              
    </div>
    <?php endwhile;
 ?>

您最终得到一个 表单,其中包含 n 个(与项目一样多)同名字段,它们不再分开。例如。你将有 n 个名为“title”的字段,n 个名为“price”的字段等

您永远不知道哪个标题属于哪个价格。

此外,您显示的代码仅显示表单的呈现,而不是您在提交时对其进行的操作(但这不会使它变得更好,因为您无法区分所有不同的输入).如果该代码需要一个标题,它可能会使用最后一个或随机的标题。

因此,如果您只想发送 单个项目:将您的 <form></form> 移至 while 循环,这样您最终会得到许多可以单独提交的表单。一般来说,我建议不要发布所有数据,而只是将自己限制在一个项目的 id 上,但这超出了这个问题的范围(但想象一下,当我在将项目提交到购物车之前将价格操纵为 0 时会发生什么)