php – 自动增加SESSION密钥ID

我在做某事时遇到了问题.
我有这个代码片段来将产品添加到购物车:

$product_id = isset($_GET['product_id']) ? $_GET['product_id'] : "";
$product_name = isset($_GET['product_name']) ? $_GET['product_name'] : "";

$sql = "SELECT * FROM products WHERE product_id LIKE '{$product_id}' AND product_name LIKE '{$product_name}' LIMIT 1";
$stmt = $connection->prepare($sql);
$stmt->execute();

$num = $stmt->rowCount();

if($num == 1)
{
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        extract($row);
        if(!isset($_SESSION['cart']))
        {
            $product_id_session = 1;
        }
        else
        {
            $count = count($_SESSION['cart']); 
            $product_id_session = $count++;
        }

        $columns = array
        (
            'product_id_session' => $product_id_session,'product_id' => $product_id,'product_name' => $product_name,'product_price' => $product_price           
        );
        $_SESSION['cart'][$product_id_session] = $columns;      
        redirect_to('products.PHP?&message=added&product_name='. $_SESSION['cart'][$product_id_session]['product_name']);
    }
}

如您所见,如果创建了会话购物车,我将变量$product_id_session分配给SESSION数组的数量加1.否则,变量$product_id_session设置为1.在购物车页面中,我有一个删除所选产品的链接

foreach($_SESSION['cart'] as $product)
{
    echo "<button onClick=\"location.href='remove.PHP?product_id_session={$product['product_id_session']}'\">
    Remove from cart
    </button>";
}

然后,在remove.PHP文件中,我有这个来处理查询字符串中的数据并从购物车中删除产品:

$product_id_session = isset($_GET['product_id_session']) ? $_GET['product_id_session'] : "";
unset($_SESSION['cart'][$product_id_session]);

我面临的问题是:例如,我在购物车中添加了两个产品.然后我删除了第一个产品,并将另一个产品添加到购物车中.新产品,而不是添加,只会取代以前在购物车中添加的产品,$product_id_session将始终是相同的值.我做错了什么?如何为SESSION指定ID?

解决方法

您可以使用以下方法将新商品添加到购物车:

$_SESSION['cart'][] = $columns;

然后它将附加到数组的末尾.

并且,在从数组中删除项目后,您可以(但没有必要)重新索引它

$_SESSION['cart'] = array_values($_SESSION['cart']);

打印出购物车时,您只需更新foreach循环以将键值捕获到某个变量,即$index.不同之处在于$index => $product部分.

foreach($_SESSION['cart'] as $index=>$product)
{
    echo "<button onClick=\"location.href='remove.PHP?product_id_session={$index}'\">
    Remove from cart
    </button>";
}

Remove.PHP基本保持不变,我刚刚更新它以获得更好的可读性:

if (isset($_GET['product_id_session']) and $_GET['product_id_session']) {
    $product_id_session = $_GET['product_id_session'];
    unset($_SESSION['cart'][$product_id_session]);
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...