更新购物车中一种产品的数量会重置其他产品先前更新的数量
Updating quantity in shopping cart for one product resets the previously updated quantity of other products
我设法使用下拉数量菜单更改了我的购物车中一种产品的数量,this.form.submit()
但是如果我的购物车中有两种具有更新数量的产品,我决定更新一种其中另一个产品的数量再次被覆盖并恢复到其先前的原始值(更新前),该值是从列出所有产品的页面使用 "Add to basket" 发送的。
当我更新一个产品的数量时,如何保留其他产品已经更新的数量?
<?php
// Add products to basket:
if (!isset($_SESSION['basket'])) {
$_SESSION['basket'] = array();
}
if (isset($_POST['id'])) {
$_SESSION['basket'][$_POST['id']] = array(
'product_id'=>$_POST['id'],
'product_photo'=>$_POST['hidden_photo'],
'product_photo_alt'=>$_POST['hidden_photo_alt'],
'product_name'=>$_POST['hidden_name'],
'product_price'=>$_POST['hidden_price'],
'product_quantity'=>$_POST['quantity'],
);
}
?>
<?php
//
if(!empty($_SESSION['basket'])) {
$total = 0;
foreach ($_SESSION['basket'] as $key => $value) {
// Below is the code which updates the quantity of a product with a particular id
// But after submitting the form resetes the quantity of other products
// With already updated quantity
if (!empty($_POST['new_qty'][$value['product_id']])) {
$quantity = $_POST['new_qty'][$value['product_id']];
} else {
$quantity = $value['product_quantity'];
}
?>
<form method="post" action="">
<select class="quantity-basket" name="new_qty[<?php echo $value['product_id']; ?>]" onchange="this.form.submit()">
<?php
// Quantity added to the basket:
if ($quantity) {
?>
<option value="<?php echo $quantity; ?>" hidden><?php echo $quantity; ?></option>
<?php
}
?>
<?php
// Drop-down quantity menu
for ($i = 0; $i <=50; $i++) {
?>
<option value="<?php echo ($i == 0) ? $i . ' (Remove)' : $i; ?>">
<?php echo ($i == 0) ? $i . ' (Remove)' : $i; ?>
</option>
<?php
}
?>
</select>
<!-- End of quantity drop-down menu -->
</form>
感谢本教程,我已经解决了这个问题:
https://www.allphptricks.com/simple-shopping-cart-using-php-and-mysql/#comment-79810
<?php
if (!isset($_SESSION['basket'])) {
$_SESSION['basket'] = array();
}
if (isset($_POST['id'])) {
$_SESSION['basket'][$_POST['id']] = array(
'product_id'=>$_POST['id'],
'product_photo'=>$_POST['hidden_photo'],
'product_photo_alt'=>$_POST['hidden_photo_alt'],
'product_name'=>$_POST['hidden_name'],
'product_price'=>$_POST['hidden_price'],
'product_quantity'=>$_POST['quantity'],
);
}
// Update quantity
if (isset($_POST['action']) && $_POST['action'] == 'update') {
foreach($_SESSION['basket'] as &$value) {
if($value['product_id'] === $_POST['type']) {
$value['product_quantity'] = $_POST['new_qty'];
break; // Stop the loop after we've found the product
}
}
}
?>
<?php
//
if(!empty($_SESSION['basket'])) {
$total = 0;
foreach ($_SESSION['basket'] as $product) {
?>
<form method="post" action="">
<input type="hidden" name="type" value='<?php echo $product["product_id"]; ?>'>
<input type="hidden" name="action" value="update">
<select class="quantity-basket" name="new_qty" onchange="this.form.submit()">
<option value="<?php echo $product['product_quantity']; ?>" hidden><?php echo $product['product_quantity']; ?></option>
<?php
// Drop-down quantity menu
for ($i = 0; $i <=50; $i++) {
?>
<option value="<?php echo ($i == 0) ? $i . ' (Remove)' : $i; ?>">
<?php echo ($i == 0) ? $i . ' (Remove)' : $i; ?>
</option>
<?php
}
?>
</select>
</form>
我设法使用下拉数量菜单更改了我的购物车中一种产品的数量,this.form.submit()
但是如果我的购物车中有两种具有更新数量的产品,我决定更新一种其中另一个产品的数量再次被覆盖并恢复到其先前的原始值(更新前),该值是从列出所有产品的页面使用 "Add to basket" 发送的。
当我更新一个产品的数量时,如何保留其他产品已经更新的数量?
<?php
// Add products to basket:
if (!isset($_SESSION['basket'])) {
$_SESSION['basket'] = array();
}
if (isset($_POST['id'])) {
$_SESSION['basket'][$_POST['id']] = array(
'product_id'=>$_POST['id'],
'product_photo'=>$_POST['hidden_photo'],
'product_photo_alt'=>$_POST['hidden_photo_alt'],
'product_name'=>$_POST['hidden_name'],
'product_price'=>$_POST['hidden_price'],
'product_quantity'=>$_POST['quantity'],
);
}
?>
<?php
//
if(!empty($_SESSION['basket'])) {
$total = 0;
foreach ($_SESSION['basket'] as $key => $value) {
// Below is the code which updates the quantity of a product with a particular id
// But after submitting the form resetes the quantity of other products
// With already updated quantity
if (!empty($_POST['new_qty'][$value['product_id']])) {
$quantity = $_POST['new_qty'][$value['product_id']];
} else {
$quantity = $value['product_quantity'];
}
?>
<form method="post" action="">
<select class="quantity-basket" name="new_qty[<?php echo $value['product_id']; ?>]" onchange="this.form.submit()">
<?php
// Quantity added to the basket:
if ($quantity) {
?>
<option value="<?php echo $quantity; ?>" hidden><?php echo $quantity; ?></option>
<?php
}
?>
<?php
// Drop-down quantity menu
for ($i = 0; $i <=50; $i++) {
?>
<option value="<?php echo ($i == 0) ? $i . ' (Remove)' : $i; ?>">
<?php echo ($i == 0) ? $i . ' (Remove)' : $i; ?>
</option>
<?php
}
?>
</select>
<!-- End of quantity drop-down menu -->
</form>
感谢本教程,我已经解决了这个问题: https://www.allphptricks.com/simple-shopping-cart-using-php-and-mysql/#comment-79810
<?php
if (!isset($_SESSION['basket'])) {
$_SESSION['basket'] = array();
}
if (isset($_POST['id'])) {
$_SESSION['basket'][$_POST['id']] = array(
'product_id'=>$_POST['id'],
'product_photo'=>$_POST['hidden_photo'],
'product_photo_alt'=>$_POST['hidden_photo_alt'],
'product_name'=>$_POST['hidden_name'],
'product_price'=>$_POST['hidden_price'],
'product_quantity'=>$_POST['quantity'],
);
}
// Update quantity
if (isset($_POST['action']) && $_POST['action'] == 'update') {
foreach($_SESSION['basket'] as &$value) {
if($value['product_id'] === $_POST['type']) {
$value['product_quantity'] = $_POST['new_qty'];
break; // Stop the loop after we've found the product
}
}
}
?>
<?php
//
if(!empty($_SESSION['basket'])) {
$total = 0;
foreach ($_SESSION['basket'] as $product) {
?>
<form method="post" action="">
<input type="hidden" name="type" value='<?php echo $product["product_id"]; ?>'>
<input type="hidden" name="action" value="update">
<select class="quantity-basket" name="new_qty" onchange="this.form.submit()">
<option value="<?php echo $product['product_quantity']; ?>" hidden><?php echo $product['product_quantity']; ?></option>
<?php
// Drop-down quantity menu
for ($i = 0; $i <=50; $i++) {
?>
<option value="<?php echo ($i == 0) ? $i . ' (Remove)' : $i; ?>">
<?php echo ($i == 0) ? $i . ' (Remove)' : $i; ?>
</option>
<?php
}
?>
</select>
</form>