【问题标题】:¿How duplicating a session?¿如何复制会话?
【发布时间】:2016-12-24 22:34:26
【问题描述】:

当数据不同但具有相同标识符 (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>

请帮助我,复制产品的会话以选择不同的颜色或尺寸。

谢谢。

【问题讨论】:

    标签: php mysql session mysqli cart


    【解决方案1】:

    你应该使用这样的多维数组,它不会覆盖你的值。

    $_SESSION['colors'][][$itemId]=$_POST['colors'];

    $_SESSION['size'][][$itemId]=$_POST['size'];

    【讨论】:

    • 感谢您的推荐,感谢您复制产品​​的会话以选择不同的颜色或尺寸???
    【解决方案2】:

    我认为在您的情况下使用数据库而不是会话。 创建一个表并插入用户的不同选择并处理该表以进行计算。大量使用会话将令人头疼。

    【讨论】:

    • 我理解大量使用 session 会让人头疼。但建表不行。至少在会话中创建一个小例子???
    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2017-04-23
    • 2011-02-12
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多