【问题标题】:Connecting a users shopping basket to their user account? PHP将用户购物篮连接到他们的用户帐户? PHP
【发布时间】:2013-01-25 23:10:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php mysql e-commerce shopping-cart


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 好的,所以你在我的用户表中说,我存储所有用户的用户名和密码,我添加另一列来存储一个数组,其中包含他们在购物车中的项目的项目 ID?
    • @AZ1 没错。基本上,总是将购物车项目保存在会话中的数组中,如果它们已登录,只需更新数据库。同样,这只是一种方法,可以扩展。不过,这应该可以帮助您入门。
    • 我希望吸收您所分享的知识,谢谢。
    【解决方案2】:

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

    还可以添加一种方法,在数小时或数天后将 cart_id 和项目从表中转出,否则您的数据库将变得庞大。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2019-04-13
      • 2019-03-27
      • 1970-01-01
      相关资源
      最近更新 更多