PHP清理代码$ _POST问题

时间:2017-11-27 19:10:12

标签: php post cart

$ _ POST ['amount']没有获得商品数量,$ _POST ['itemId']​​显示数据库中的最后一项,但不显示您点击的项目。所以所有的商品都是展示的,但是形式只收到最后一个,而不是点击

的商品
<div class=cart>
    <b>Cart:</b><br>
    <?php
    if(isset($_POST['add']))
       {?>

    <?=$_POST['amount']?>

       <?php }
  ?>
</div>
<hr>


<?php

class shop
{   
    public function baseConnect()
    {
        $connect = mysqli_connect("localhost", "root", "", "test");
        $table = "SELECT * FROM `goods`";
        $result = mysqli_query($connect, $table);

        return $result;
    }
}

$shop = new shop;
$items = $shop->baseConnect();

?>

<form method='post'>
<?php
while ($item = mysqli_fetch_assoc($items))
{?>
    <input type=hidden value='<?=$item['good'];?>' name='itemId'>
    <b><?=$item['good'];?></b><br>
    Price: <?=$item['price'];?>$<br>
    <input type=text name='amount'><br>
    <input type=submit name='add' value='Add to cart'><br>
<?php }
?>
</form>

1 个答案:

答案 0 :(得分:2)

在您的代码中,您将在同一表单元素中创建所有表单输入,并为每个元素重用相同的名称属性。单击“提交”时,发送到服务器的内容是这些名称的最后一个实例。因此,如果您向amount添加一个数字并单击列表中不是最后一项的项目的提交按钮,您仍会收到最后一个amount和{{1}实例的值}}

要解决此问题,请在while循环中移动itemId(在循环结束时也包含<form method="post" action="">标记)。

变化:

</form>

要:

<form method='post'>
<?php
while ($item = mysqli_fetch_assoc($items))
{?>
    <input type=hidden value='<?=$item['good'];?>' name='itemId'>
    <b><?=$item['good'];?></b><br>
    Price: <?=$item['price'];?>$<br>
    <input type=text name='amount'><br>
    <input type=submit name='add' value='Add to cart'><br>
<?php }
?>
</form>