如果您有两张表,一张用于用户,一张用于商品,您可以执行以下操作。
通过将 item_ids 添加和删除到序列化数组中来管理当前购物篮项目,您可以将其同时存储在用户表和会话中,使它们保持同步。例如,如果用户第一次访问您的商店(未登录,并且购物篮为空),您可以像这样创建会话。
session_start();
我们开始会议。
if (isset($_SESSION['current_basket']) {
$current_basket = unserialize($_SESSION['current_basket']);
} else {
$current_basket = array();
}
因为这是我们的访问者第一次访问我们的页面,会话变量current_basket不会被设置,这意味着上面的 if 语句不会运行,而是在一个名为current_basket的变量中创建一个空的 PHP 数组。
现在,当访问者将商品添加到购物篮时,我们只需要数据库中的商品 ID 并将其添加到current_basket数组中。
$current_basket[] = $item_id;
然后我们立即使用新数组更新会话变量,并在此过程中对其进行序列化。
$_SESSION['current_basket'] = serialize($current_basket);
您现在有一个适当的、可用的数组,其中包含该人购物篮的所有产品 ID。
现在,让我们假设用户已登录。我们会检查这一点,然后再添加一个步骤。
$sql = "UPDATE users SET current_basket=" . serialize($current_basket) . " WHERE id=$user_id"
// Execute that query.
在那里,现在相同的数组在数据库中,然后您可以在用户登录时将其拉取并设置为会话变量。
每次添加或删除产品时,您都可以运行这一系列步骤,从而在会话和数据库中保持更新。
为了解释,这显然是一个非常淡化的概念。显然,您需要更好地管理阵列。例如,如果产品已经存在,则不将其添加到购物篮中,从阵列中删除项目......等等。
关键是序列化数组,并始终存储在会话中,如果用户已登录,则存储在用户表中。
然后,当用户返回并登录时,您可以使用数据库中的数组为他们设置会话中的数组,从他们上次访问您的站点开始。