¿如何复制会话?

问题描述:

我希望在数据不同但具有相同标识符的情况下始终开启复制会话(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 

数据(colorsize)通过方法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

感谢您的建议,并为复制产品的会话选择颜色或大小不同??? –

我认为你的情况使用数据库而不是会话。 创建一个表并插入用户的不同选择并处理该表以供计算。会话的大量使用将是头痛的问题。

+0

我知道会话的大量使用会令人头疼。但不建立一个表。至少在会话中创建一个小例子? –