0

我对如何做到这一点感到困惑。假设用户在我的电子商务网站上创建了一个帐户,然后开始将产品添加到他们的购物篮中。如果我将用户的用户名和密码存储在数据库表中,并使用会话/cookie 来管理他们购物篮中的产品,我需要做什么才能将用户购物篮连接到他们的帐户,以便他们登录时在他们将能够看到他们以前存储的项目?

我是否首先允许用户登录,查询他们是否登录成功,然后为他们的用户名创建一个会话/cookie 变量?或者我是否必须将用户购物车项目存储在数据库中并将其与用户帐户表连接?

我对如何将购物篮物品存储到桌子上感到困惑。这甚至是正确的方法吗?

还没有代码,我想在开始编码之前正确创建数据库,只需要一些建议。谢谢

4

2 回答 2

2

如果您有两张表,一张用于用户,一张用于商品,您可以执行以下操作。

通过将 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.

在那里,现在相同的数组在数据库中,然后您可以在用户登录时将其拉取并设置为会话变量。

每次添加或删除产品时,您都可以运行这一系列步骤,从而在会话和数据库中保持更新。

为了解释,这显然是一个非常淡化的概念。显然,您需要更好地管理阵列。例如,如果产品已经存在,则不将其添加到购物篮中,从阵列中删除项目......等等。

关键是序列化数组,并始终存储在会话中,如果用户已登录,则存储在用户表中。

然后,当用户返回并登录时,您可以使用数据库中的数组为他们设置会话中的数组,从他们上次访问您的站点开始。

于 2013-01-25T23:30:56.090 回答
1

我将拥有购物车表 cart_id / user_id / date_time_created,然后在购物车 ID 上建立一个项目表。

还添加了一种在这么多小时或几天后将 cart_id 和项目从表中转储的方法,否则您的数据库将变得庞大。

并让您的最终用户知道这些项目将在 x 时间后被转储。

于 2013-01-25T23:27:19.883 回答