mysql—php中整个数据库中最后一项更新的数量

fzsnzjdm  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(332)

我正在用php和mysql做我的电子商务网站的学期专题。我用这两种工具构建了一个购物车系统。我遇到的问题是,当购物车只包含一个项目时,它将按预期工作,即更新数据库“数量”列中的反映数量。但是当我增加购物车中的商品时,它将不会像我想的那样工作,即它只会用最后一个商品数量更新整个数据库的数量列。
下面是我的代码。
任何帮助都会很有帮助,因为现在我正在学习这些东西。

**欢迎客人!**购物车-商品:-价格:-转到购物车

<div id="products_box"><!-- gets the products from the database section starts from here -->
                <form action="cart.php" method="post" enctype="multipart/form-data">
                    <table width="750px" align="center" bgcolor="#0099CC">
                        <tr align="center">
                            <td><b>Remove</b></td>
                            <td><b>Product(s)</b></td>
                            <td><b>Quantity</b></td>
                            <td><b>Total Price</b></td>
                        </tr>
                        <?php
                        $ip_add = getIp();
                        $total = 0;

                        $sel_price = "select * from cart where ip_add = '$ip_add'";
                        $run_price = mysqli_query($db, $sel_price);

                        while($record = mysqli_fetch_array($run_price)){
                            $product_id = $record['product_id'];

                            $pro_price = "select * from products where product_id = '$product_id'";
                            $run_pro_price = mysqli_query($con, $pro_price);

                            while($p_price = mysqli_fetch_array($run_pro_price)){

                                $product_price = array($p_price['product_price']);
                                $product_title = $p_price['product_title'];
                                $product_img = $p_price['product_img2'];
                                $single_price = $p_price['product_price'];

                                $value = array_sum($product_price);
                                $total += $value;

                        ?>
                        <tr>
                            <td><input type="checkbox" name="remove[]" value="<?php echo $product_id;?>"></td>
                            <td><?php echo $product_title;?><br><img src="admin_area/products_images/<?php echo $product_img;?>" width="80px" height="80px"></td>
                            <td><input type="text" name="qty" value="1" size="3" min="1"></td>
                            <?php 
                                if(isset($_POST['update'])){
                                    $qty = $_POST['qty'];

                                    $insert_qty = "update cart set qty='$qty' where ip_add='$ip_add' AND product_id = '$product_id'";

                                    $run_qty = mysqli_query($con, $insert_qty);

                                    $total *= $qty;
                                }
                            ?>
                            <td><?php echo  $single_price ." ". "&euro;"?></td>
                        </tr>
                        <?php
                            } // to include in the php code so it effects the whole row
                        }?> 
                        <tr>
                            <td colspan="3" align="right"><b>Sub Total:</b></td>
                            <td><b><?php echo $total ." ". "&euro;"?></b></td>
                        </tr>

                        <tr></tr>
                        <tr></tr>
                        <tr></tr>

                        <tr>
                            <td colspan="2"><input type="submit" name="update" value="Update Cart"></td>

                            <td> <input type="submit" name="continue" value="Continue Shopping"></td>
                            <td><button><a href="checkout.php" style="text-decoration:none; color:black;">Checkout</a></button></td>
                        </tr>
                    </table>
                </form>
yptwkmov

yptwkmov1#

提交html表单时,如果它包含多个同名表单元素,则只发送最后一个。因为所有的数量输入框都有 qty ,只有购物车中最后一个产品的数量被提交,所以这就是为什么你所有的产品最终都是这个数字。
php有一个特性,它允许您在表单元素名称中使用方括号,并最终得到一个数据数组(请参见上一节)http://php.net/manual/en/faq.html.php 有关如何工作的更多信息)。你可以用 [] 将值附加到数组中(您已经在为“从购物车中删除项目”复选框执行此操作),或者您可以通过将元素命名为 qty[foo] (结果是 $_POST['qty']['foo'] ).
有几种不同的方法可以解决这个问题。因为这是一个项目,所以我将向您指出一个可能的解决方案,并建议将您的quantity form元素更改为:

<input type="text" name="qty[<?php echo $product_id;?>">]" value="1" size="3" min="1">

那你看看这是怎么回事 $_POST 数据看起来像。
您还需要修改更新数量代码,以确保您使用的是相应产品的数量。
其他意见:
ip地址对于用户不是唯一的,因此这不是唯一标识购物车的好方法(您可能已经知道这一点)。目前,拥有相同ip地址的用户将共享同一个购物车。
你的 $total 计算看起来有点可疑(尝试添加多个不同数量的项目到您的购物车)。
您的脚本似乎也容易受到sql注入的攻击。考虑一下,如果恶意用户键入了该字符串,您的sql查询会是什么样子 1', product_id='123', ip_add='... 进入数量框-这将允许他们轻松地添加任何产品到任何其他用户的购物车。

相关问题