如何存储访客结帐?

时间:2015-06-06 21:46:15

标签: php mysql database-design

好的,所以我的网站就像“发布您的订单”而不是通常的在线支付方式,因为我将首先发送物品,然后是货运服务提供的货到付款现金。

我有一个用户表 user_id,电子邮件,密码,名字和姓氏等。

具有的user_order表 order_id,user_id_fk,order_status,order_placed,address_id_fk

order_items表有 order_item_id,order_id_fk,product_id,quantity,size_id_fk

地址表 address_id,user_id_fk,street,city,province等

因此,如果用户已注册,则很容易这样做,因为我只是将他们的user_id链接到user_order表,并将其地址从他们的address_book链接

我的问题是,我如何通过访客结账这样做?我试图避免他们被迫注册,即使这很容易。

我现在想到的只是将它们插入到users表中,但是将它们的密码设置为NULL并只创建一个guest组并将它们放到该组中。

但这可能会导致问题,我的用户表中的电子邮件必须是唯一的,访客结帐可能会在同一封电子邮件中不止一次发生......现在是什么?

我应该只在列表中添加列吗?另一个,姓名,电子邮件,地址?所以它与用户无关?这是可能的,但有一个功能,我希望注册用户有......跟踪他们的订单历史。

请帮助...谢谢:D;)

4 个答案:

答案 0 :(得分:2)

我同意“Drew Pierce”,但是从另一方面给你另一个选择

首先你应该阅读有关电子商务平台(例如OpenCart),他们如何推动这些东西。

您不需要将每个访客添加到用户表中以获取以下内容:

1 - 来宾无权查看订单历史或...等

2 - 电子邮件字段必须在结帐时必填,并且还会向他发送通知电子邮件(也许您添加确认电子邮件..由您决定。)

3 - 您需要在数据库中保存的所有内容都是订单表中的订单详情

4 - 您和来宾之间的所有流程都将通过他的电子邮件

5 - 他无权追踪任何订单或看到他的活动,直到他成为真正的用户

6 - 订单详细信息必须始终包含用户的所有详细信息,即使他是真实用户(它将是真实用户的重复数据,但用户可以更改任何用户的电子邮件或电话号码)时间,他不能为旧订单做,所以你总是知道订单的真实历史)

用户表中只有一个访客用户,但是在订单表中有很多订单,每个订单都有其详细信息,电子邮件,电话号码等

7 - >

答案 1 :(得分:1)

最重要的是获得他们的钱。如果他们想留下客人就让他们。提醒他们,只有注册的用户才能获得促销并查看之前的活动。之前的活动虽然不是注册用户,但以后不会再看到。

假设他们从该电子邮件地址获得了10个订单。所以,将它们作为新用户每个时间放入其中并将其电子邮件地址添加到其中。将该用户标记为来宾。所以为grandma@blahblah.com的10位新客户类型用户。没有电子邮件消失。毕竟,人们可能会使用一些可怜的奶奶的电子邮件地址欺骗系统。

现在他们想成为注册用户。电子邮件已发送,他们必须单击它才能成为用户(电子邮件中的链接)。

现在第11次购买来自注册用户(grandma@blahblah.com)。订单历史:1个订单。

对我来说似乎很紧张。

答案 2 :(得分:1)

出于可用性原因,您实际上可能希望用户能够查看过去使用其电子邮件地址下达的订单。结算电子邮件字段回答问题"您授权谁查看此订单?"。这样,grandma@blahblah.com可以下几个订单,然后一旦她实际注册(通过更改她的密码),过去作为客人的订单将在那里供她跟踪。所以试试这个流程,有时称为shadow profile模式:

  1. 说明您的访客结帐页面,以明确帐单电子邮件地址的合法所有者将能够使用该地址查看网站上的所有订单。
  2. 如果您的users表格中不存在该地址,请使用归零密码哈希值和空confirmed_on日期创建帐户。
  3. 此步骤会根据您是否希望访客能够使用注册用户的电子邮件地址而更改。
    • 如果是,请将is_guest列添加到user_order
    • 如果没有,如果confirmed_on不为空,则要求用户登录。这意味着confirmed_on之前的所有订单都是客户订单,之后的所有订单都是登录订单。< / LI>
  4. 向访客发送包含密码重置链接的电子邮件收据。确保使用正确的SPF和DKIM记录。用以下内容标记链接:

      

    注册以使用$ store_name管理您的订单。

         

    在极少数情况下,您可能会被列为未放置的订单的结算联系人。如果是,请点击此链接取消订单。

  5. 当用户首先关注电子邮件密码重置链接时,请设置confirmed_on日期。

  6. 在登录用户的订单历史记录报告中,清楚地将每个订单标记为来宾或已注册。
  7. 如果某位grandma@blahblah.com的用户未在客人订单上输入grandma@blahblah.com,则grandma@blahblah.com的真正所有者将收到电子邮件收据,从而有机会取消该邮件。

    另一种方法是将订单与会话而不是用户相关联。您可能已经在制作随机会话ID(并将其存储在Cookie中),以便将访客的购物车与其他访客的购物车区分开来。因此,将user_id_fk表格中的user_order更改为session_id_fk。然后将会话ID链接到您已使用的user_session表中的用户ID。

答案 3 :(得分:0)

我建议按照您的想法进行操作,只需添加用户并添加列'guests' int(1),如果用户是访客,则此值设置为1,如果不是,{{1} }。

然后只需将密码设置为空字符串。