0

对于我的第一次编程尝试,我正在使用 php 和 MySQL 制作一个简单的 webapp,用于输入客户信息并存储有关订单的信息。

到目前为止,我已经制作了一个表格来输入客户信息,一个页面来编辑该信息,另一个页面来显示不同的客户,这一切都很好。

但是,在尝试实施下一阶段时,我遇到了麻烦。

我有一个包含 3 列的 editcustomers 页面。

  • 第 1 列显示了一个包含客户信息的表单,允许对其进行编辑。
  • 第 2 列允许订购产品并显示订购了多少产品
  • 第 3 列显示到目前为止支付的总额和欠款总额。

我目前拥有的页面代码:

<html>
<?php
$id = $_GET['id'];
require_once('connect.php');
$sth = $dbh->query("SELECT * FROM customers where id = '$id'");
$sth->setFetchMode(PDO::FETCH_ASSOC);
?>

<div id="main">
    <div id="left">
    <form name="myForm" action ="process.php" method ="post" >
    <?php while($row = $sth->fetch()){ ?>
    <p><input type = "hidden" name ="id" value="<?php echo $row["id"] ?>"/>
    <p><input type = "text" name ="firstName" size ="30" value=" <?php echo $row["firstName"]?>"/>
    <p><input type = "text" name ="lastName" size ="30" value="<?php echo $row["lastName"]?>"/>
    <p></p>
    <input type="submit" value="Update" />
    <?php }?>
    </div>

    <div id="mid">
    <p>Amount owed<br />
    <input type = "text" name ="moneyOwed" size ="30" /></p>
    <input type="submit" value="Pay" /> 
    <p>Number of aaaa<br />
    <input type = "text" name ="numAaa" size ="30" /></p>
    <p>Number of bbbb<br />
    <input type = "text" name ="numBbb" size ="30" /></p>
    <p>
    <input type="submit" value="Update" />
    </div>

    <div id="right">
    <b>Total Balance</b>
    <p> Money owed: </p>
        <p> aaa total: </p>
    <p> bbb total: </p>
    <p> Total: </p>
    <input type = "text" name ="pay" size ="20" /></p>
    <input type="submit" value="Make Payment" />
    </div>
<?php
$dbh =null;
?>
</body>
</html>

我有以下数据库结构:

  • 客户表、名字、姓氏等基本信息以及 id 字段。
  • 一个产品表,列出了不同的产品,只有 1 行包含每个产品的成本。
  • 采购表,id 字段,numProductA、numProductB 等字段,显示订购的每个产品的数量

我遇到的问题是,在我的editcustomerspage 中,我有一个数据库查询来从customers 表中读取信息以填充我第一列中表单中的字段,如果选择了函数,还有一个单独的查询来更新它。

更新第二个表单应该没问题,因为我可以使用隐藏字段来区分表单,但是我不确定如何从客户表和购买表中读取信息,以便我可以在第二个表单中填充字段。

部分问题在于,如果给定客户尚未下订单,则购买表可能为空。

我正在考虑摆脱购买表,并将字段添加到用户表上,这将解决我的问题,尽管我认为这通常被认为是不好的做法?

产品将在应用程序中固定,不会更改。即便如此,将列名成本和名称以及每个产品作为记录仍然会更好吗?

我可以采取哪些方法来解决这个问题?

4

2 回答 2

1

由于 numProductA、numProductB 列,即使您当前正在做的事情也被认为是不好的做法。当您有 1000 种产品并且用户从所有这些产品中订购不同数量的产品时会发生什么。仅当产品列表是固定的(即编码到应用程序中)并且需要大量编码时才有效。

您可能希望创建一个包含以下字段的 purchase_item 表:id、purchase_id、product_id、num_product。它就像标准账单上的一行:purchase_id 标识该行属于哪个账单;product_id 将显示该行的产品,num_product 将显示该行的数量(乘数)。

通过这种方式,您无需在将新产品添加到数据库时更改代码。

于 2012-11-25T20:11:21.650 回答
0

如果没有详细描述您遇到的问题,很难说如何解决这些问题。应该可以使用所描述的设计来实现您想要的。但是,您似乎误解了关系数据库,这就是为什么您的数据库架构令人大跌眼镜的原因。

数据库表不是电子表格。虽然一个表可以有数百万行,但列数通常被限制为小得多。即使限制不是问题,关系数据库的设计方式也不能很好地跨大量列存储统一数据。例如,您的数据库将无法回答“什么是最畅销的产品”、“100 多个客户购买了哪些产品”等问题。

经验法则是每个表都应包含固定数量的列。如果您发现当您开始销售新产品时必须添加列,那么您做错了。

以下是您可能应该在您的应用程序中执行的操作:

  • products应该是一个表格,每个可用产品都有一行,包含每个产品的唯一值id、价格和其他信息,例如名称、制造商等。
  • purchases应该为客户订购产品的每个(客户,产品)组合包含一行。该行应包含客户 ID、产品 ID 和订购数量。

然后,您可以使用 SQL 轻松构建一个查询,生成特定客户订购的产品集。使用连接,可以使用产品名称和价格来增强此信息。

于 2012-11-25T20:21:01.930 回答