【问题标题】:How to update multiple rows in table如何更新表中的多行
【发布时间】:2018-04-30 06:30:56
【问题描述】:

我正在使用 PHP 和 MySQL 制作在线商店购物车。现在我在购物车上工作。基本上到现在我都可以从 db 中检索数据并将其显示在购物车中,就像这张图片一样:

现在我正在更新产品数量。例如,用户必须能够将产品 1 的数量设置为 2,产品 2 的数量设置为 3,产品 3 的数量设置为 4。

因此必须有多个查询,因为每个产品都有一个唯一的产品 ID。

所以我做的是这样的:

<select name='quantities[]'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
</select>

这个表单的动作是这样的:

$cart_id = $_GET['cart_id'];
if(isset($_POST['update'])){
    foreach($_POST['quantities'] as $quantities)
    {
        $insert_qty = "UPDATE cart SET qty = '$quantities' WHERE cart_id = '$cart_id'";
        $run_qty = mysqli_query($con,$insert_qty);
        if($run_qty)
        {
            echo '<META HTTP-EQUIV="Refresh" Content="0; URL=cart.php">';    
        }else{
            die(mysqli_error($con));
        }
    }
}

但此代码的问题在于它只获取最后一个产品的最后数量,并将整个购物车项目更新为该数量。

例如,如果您将最后一个产品的数量设置为 5,它最终会将数字 5 设置为该购物车中现有的所有产品。

所以我的问题是如何正确更新购物车,以便每个产品都有单独的数量。

我非常感谢任何关于这个问题的想法、建议或解决方案,

提前谢谢...

这也是我检索数据的方式(仅用于查找):

$get_add = "SELECT * FROM cart WHERE cart_id = '$cart_id'";
$run_add = mysqli_query($con,$get_add);
$cart_items = [];
$total_price_to_pay = 0;
while ($row_results = mysqli_fetch_array($run_add)){
    $item = array(
        'table_id' => $row_results['table_id'],
        'cart_id' => $row_results['cart_id'],
        'pro_id' => $row_results['product_id'],
        'pro_title' => $row_results['product_title'],
        'pro_price' => $row_results['product_price'],
        'pro_img' => $row_results['product_image'],
        'pro_supplier' => $row_results['product_supplier'],
        'qty' => $row_results['qty'],
        'cart_ip' => $row_results['cart_ip'],
        'pro_total' => $row_results['qty']*$row_results['product_price'],
    );
    $total_price_to_pay +=  $row_results['qty']*$row_results['product_price'];
    $cart_items[] = $item;
}
foreach ($cart_items as $cart) {
        echo $cart['pro_title'] etc ;
}

【问题讨论】:

  • 您需要将 pro_id 添加到更新 SQL。因此,您需要遍历包含每行的数量和产品 ID 的父对象,而不是对每个数量执行一次。
  • 正如你所说的,每个产品都有唯一的产品 ID,所以我建议在编写更新查询时使用具有 cart_id 和 product_id 组合的条件。
  • 可以把product id放在name='quantities[5]'[]里面,可以通过$key变量在foreach的每次迭代中获取每个product id。

标签: php mysqli shopping-cart product-quantity


【解决方案1】:

您需要发布所有数量的product_id(请将value="&lt;?php echo $item['pro_id']; ?&gt;"替换为您的实际变量,该变量可以在每个购物车项目/产品的隐藏字段中设置正确的product_id,或者如果它已经存在,那么您可以删除它隐藏字段并改用它):

<input type="hidden" name="product_ids[]" value="<?php echo $item['pro_id']; ?>" />
<select name='quantities[]'>
    <option value='1'>1</option>
    <option value='2'>2</option>
    <option value='3'>3</option>
    <option value='4'>4</option>
    <option value='5'>5</option>
</select>

然后在操作方面在您的更新查询中使用此product_id(如果product_id 已经不存在,则还需要更改您的数据库表):

$cart_id = $_GET['cart_id'];
if(isset($_POST['update'])){
    foreach($_POST['quantities'] as $index => $quantities)
    {
        $insert_qty = "UPDATE cart SET qty = '$quantities' WHERE cart_id = '$cart_id' AND product_id = '".$_POST['product_ids'][$index]."'";
        $run_qty = mysqli_query($con,$insert_qty);
        if($run_qty) {
            echo '<META HTTP-EQUIV="Refresh" Content="0; URL=cart.php">';    
        } else {
            die(mysqli_error($con));
        }
    }
}

希望,它会解决你的问题...

【讨论】:

  • 上面写着Cannot use [] for reading!这意味着我不能使用echo "&lt;input type='hidden' name='".$product_ids[]."' value='".$cart['pro_id']."'&gt; "
  • 您的说法有误,请更改隐藏字段名称。所以最后的字符串是echo "&lt;input type='hidden' name='product_ids[]' value='".$cart['pro_id']."'&gt; ";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 2016-03-24
  • 2020-11-18
  • 1970-01-01
相关资源
最近更新 更多