【问题标题】:MYSQL/PDO PHP System---looking for broadstroke inputMYSQL/PDO PHP系统---寻找大写输入
【发布时间】:2016-11-17 00:04:00
【问题描述】:

所以,我有一些初学者编程知识(基于 Web 的不多),但我已经设法弄清楚如何设置 MYSQL 数据库以及如何制作一个 PHP 文件来从测试中提取行我在数据库中创建的表。

我正在寻找一些关于我需要采取哪些步骤来实现我的想法的输入或伪代码或一般指导。

我知道我可能需要研究对我将收集的少数数据项的必要关系调用。

我希望让我的志愿者工作更轻松。我在一个协调其他志愿者的地方做志愿者。我的工作是跟踪他们的认证(在物理文件箱中)---我正在使用其他人的旧 Excel 表。

我想向主任介绍一种更有效的方式,让我们收集关键数据,然后轻松地与志愿者分享。

隐私没有问题(我收集的所有数据都没有姓名或个人信息,只是该特定志愿者是否具有某种认证——我会将其与他们的志愿者编号相关联,然后只是交叉- 参考我的物理文件)

所以,我想建立一个 PHP/MYSQL 系统来实现这一点:

让用户登录(使用 Facebook 或 Gmail——每个人都必须有一个或另一个才能使用它)**这一点在现阶段最不重要,因为我只是想证明一个具有工作功能的系统

让用户通过 php 页面获得一份认证清单。这基本上是他们登录时所看到的全部内容。

让该用户检查他们拥有哪些,​​而其他人则为空。

保存这些值并保持不变。 (使用保存按钮或自动)

清单是否可以通过网络链接(由用户)共享;清单由他们根据需要更新的值填充。

假设 我想我需要两张桌子?

用于维护清单值和相关徽标的表: 表一

我假设我的第二张表将用于跟踪用户

表 2

我假设表之间会有关系调用?

所以,如果这个问题过于笼统,我理解。我只是在寻找一种解决它的方法,不一定是太详细的回应。只是我前进的框架。

【问题讨论】:

  • 您可能应该避免尝试将徽标的实际图像存储在 mysql 表中,这是可能的,但在实践中很糟糕。而是将图像保存到目录,并存储文件位置。
  • 如果其中一个答案对您有帮助,请选择它(如果您愿意,请点赞)。研究、测试和写出这些答案需要时间。询问和运行不是很酷。

标签: php mysql database-design pdo relational-database


【解决方案1】:

您的数据库设计应满足两个标准:

  1. 没有任何信息在任何地方不必要地重复
  2. 如果删除用户或认证,则包含该用户或认证的所有其他记录也应

我会有 3 个 InnoDB 表

users
    id //perhaps volunteer id if they're unique. Primary key
    login //email used to login
    api_service //not sure about this; gmail or facebook perhaps?
    password //IF you choose to implement login yourself, remove api_service
    ... //anything else describing the user (not certifications)
    created //date account was added

certifications
    id //unique identifier. Primary key
    name //what is it called
    ... //anything else describing an individual certification

user_certs
    id //unique identifier. Primary key
    user //Foreign key to this table. Primary key from users table
    cert //Foreign key to this table. Primary key from certifications table
    issued_on // date the user received the certification
    expires // date the cert will expire
    ...//anything else describing the binding such as who granted cert or 
       //what is cert ID number

整个登录机制不能真正用一个段落来解决。我不熟悉 Facebook 或 Google 登录 API,所以无论如何我都帮不了你。对不起。

一些示例查询:

显示一位用户的所有认证(给定他的志愿者 ID)

SELECT certifications.name, certifications.id 
FROM users
LEFT JOIN user_certs ON user_certs.user = user.id
LEFT JOIN certifications ON certifications.id = user_certs.cert
WHERE users.id = $volunteerID

查看具有给定证书名称的所有用户

SELECT users.id
FROM users
LEFT JOIN user_certs ON user_certs.user = user.id
LEFT JOIN certifications ON certifications.id = user_certs.cert
WHERE certifications.name = $certName

【讨论】:

    【解决方案2】:

    这里需要 3 张桌子:

    1. certifications 列表。
      • 你的设计是正确的,除了小注:我会把item# 改为certification_id 以强调它是primary-key
      • 不建议尽可能将徽标存储在数据库中。通常在数据库中,您只存储图像的 URL,或者可能是诸如“/www/uploads/logo_1.jpg”之类的字符串,您可以使用它在磁盘上查找图像。
    2. 第二个表users 将是您的用户列表。它应该有user_id (int) 和volunteer_number。如果您不需要任何其他信息,就足够了。
    3. 现在第三个表user_certs 将连接这两者并包含有关哪个志愿者拥有哪个认证的信息。这些字段将是:
      • user_id(来自第二个表的 ID)
      • certification_id(第一个表中的 ID)

    存储信息实际上已经足够了。您可以通过查看user_certs 表来判断用户是否具有特定认证。如果有记录,他有证明。

    现在关于共享您的列表。您只需给每个用户一个这样的链接:example.org/certificates.php?user_id=12345。 在 PHP 中,当您呈现此页面时,您将拥有以下数据:

    • user_id 从 $_GET 收到
    • 表 1 中所有可能的认证列表
    • user_id=12345 通过的认证列表来自表 3。

    这足以构建可共享列表。如果您以后需要更多数据(例如认证日期、测试中心名称等),您可以使用新字段扩展 user_certs 表。

    【讨论】:

    • 老兄,我们的表同名:-)
    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2015-06-04
    • 2012-07-05
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    相关资源
    最近更新 更多