¿如何复制会话?
问题描述:
我希望在数据不同但具有相同标识符的情况下始终开启复制会话(ID)。¿如何复制会话?
的产品数据库的结构:
id product price
1 shirt 30
2 pants 34
产品的颜色的数据库的结构:
id product_id color
1 1 blue
2 1 yellow
3 2 White
4 2 black
的数据库的结构尺寸的产品
id product_id size
1 1 XS
2 1 S
3 2 M
4 2 XL
数据(color
和size
)通过方法POST
$_SESSION['colors'][$itemId]=$_POST['colors'];
$_SESSION['size'][$itemId]=$_POST['size'];
和产品的id
通过方法GET
发送。
$itemId = isset($_GET['itemId']) ? $_GET['itemId'] : "";
我需要复制产品的会话以选择不同的颜色或大小。
例
-----------------------------------
Product Quantity Price
-----------------------------------
Shirt blue S 1 30
Shirt blue XS 1 30
Shirt yellow S 1 30
如果我们用相同的值(蓝色衬衫S)添加相同的产品,仅更新量。
-----------------------------------
Product Quantity Price
-----------------------------------
Shirt blue S 2 60
不成就获得了产品的复制,更新选择的相同值 。
代码updatecart.php
<?php
session_start();
$itemId = isset($_GET['itemId']) ? $_GET['itemId'] : "";
//SESSION colors
$_SESSION['colors'][$itemId]=$_POST['colors'];
//SESSION size
$_SESSION['size'][$itemId]=$_POST['size'];
if ($_SERVER['REQUEST_METHOD'] == 'POST' and isset($_POST['qtyupdate'])) {
for ($i = 0; $i < count($_POST['qtyupdate']); $i++) {
$key = $_POST['arr_key_' . $i];
$_SESSION['qty'][$key] = $_POST['qtyupdate'][$i];
}
} else {
$qty = isset($_POST['qty']) ? $_POST['qty'] : 1;
if (!isset($_SESSION['cart'])) {
$_SESSION['cart'] = array();
$_SESSION['qty'][] = array();
}
if (in_array($itemId, $_SESSION['cart'])) {
$key = array_search($itemId, $_SESSION['cart']);
$_SESSION['qty'][$key] = $_SESSION['qty'][$key] + $qty;
} else {
array_push($_SESSION['cart'], $itemId);
$key = array_search($itemId, $_SESSION['cart']);
$_SESSION['qty'][$key] = $qty;
}
}
header('location:cart.php');
?>
代码cart.php
<?php
session_start();
$itemCount = isset($_SESSION['cart']) ? count($_SESSION['cart']) : 0;
if (isset($_SESSION['qty'])){
$meQty = 0;
foreach ($_SESSION['qty'] as $meItem){
$meQty = $meQty + $meItem;
}
}else{
$meQty = 0;
}
if (isset($_SESSION['cart']) and $itemCount > 0){
$itemIds = "";
foreach ($_SESSION['cart'] as $itemId){
$itemIds = $itemIds . $itemId . ",";
}
$inputItems = rtrim($itemIds, ",");
$meSql = "SELECT * FROM products WHERE id in ({$inputItems})";
$meQuery = mysqli_query($kcon, $meSql);
$meCount = mysqli_num_rows($meQuery);
}else{
$meCount = 0;
}
if ($meCount == 0){
echo "<div>No items in the basket</div>";
}else{
?>
<form action="updatecart.php" method="post" name="fromupdate">
<table class="table">
<tr>
<td>Product</td>
<td>Price</td>
<td>Quantity</td>
</tr>
<?php
$total_price = 0;
$num = 0;
while ($meResult = mysqli_fetch_assoc($meQuery)){
$key = array_search($meResult['id'], $_SESSION['cart']);
$total_price = $total_price + ($meResult['price'] * $_SESSION['qty'][$key]);
$intemId=$meResult['id'];
$color = $_SESSION['colors'][$intemId];
$size = $_SESSION['size'][$intemId];
}
?>
<tr>
<td class="cart-image">
<h3><?php echo $meResult['product']; ?> <?php echo $color; ?> <?php echo $size?></h3>
</td>
<td class="cart-price"><?php echo $meResult['price']; ?></td>
<?php
$num++;
}
?>
</tr>
</table>
请帮助我,一个产品的会话复制到选择一种颜色或大小不同。
谢谢。
答
你应该使用像这样的多维数组它不会覆盖你的值。
$ _SESSION ['colors'] [] [$ itemId] = $ _ POST ['colors'];
$ _SESSION ['size'] [] [$ itemId] = $ _ POST ['size'];
答
我认为你的情况使用数据库而不是会话。 创建一个表并插入用户的不同选择并处理该表以供计算。会话的大量使用将是头痛的问题。
+0
我知道会话的大量使用会令人头疼。但不建立一个表。至少在会话中创建一个小例子? –
感谢您的建议,并为复制产品的会话选择颜色或大小不同??? –