如何更新 table 中的多行
How to update multiple rows in table
我正在使用 PHP 和 MySQL 制作在线商店购物车。现在我正在研究购物车。基本上到现在我都可以从数据库中检索数据并将其显示在购物车中,就像这张图片一样:
现在我正在更新产品数量。例如,用户必须能够将产品 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 ;
}
您需要 post product_id
所有数量(请将 value="<?php echo $item['pro_id']; ?>"
替换为您可以在每个购物车的隐藏字段中设置正确 product_id
的实际变量 item/product 或者如果它已经存在,那么你可以删除这个隐藏字段并改用它):
<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
已经不存在,则还需要更改您的数据库 table):
$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));
}
}
}
希望,它能解决您的问题...
我正在使用 PHP 和 MySQL 制作在线商店购物车。现在我正在研究购物车。基本上到现在我都可以从数据库中检索数据并将其显示在购物车中,就像这张图片一样:
现在我正在更新产品数量。例如,用户必须能够将产品 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 ;
}
您需要 post product_id
所有数量(请将 value="<?php echo $item['pro_id']; ?>"
替换为您可以在每个购物车的隐藏字段中设置正确 product_id
的实际变量 item/product 或者如果它已经存在,那么你可以删除这个隐藏字段并改用它):
<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
已经不存在,则还需要更改您的数据库 table):
$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));
}
}
}
希望,它能解决您的问题...