2012-11-25 142 views
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表和Purchase表中讀取信息,以便可以填充我的字段第二種形式。

部分問題是,如果客戶尚未下訂單,則給定客戶的購買表可能爲空。

我正在考慮擺脫購買表,並將字段添加到用戶表,這將解決我的問題,但我認爲這通常被認爲是不好的做法?

該產品將被固定在應用程序中,並且不會改變。即便如此,列名稱和名稱以及每個產品作爲記錄是否還會更好?

我可以採取哪些方法解決這個問題?

+0

我希望這個問題對本網站不太寬泛,如果問題不恰當,我很抱歉。 –

回答

1

因爲列numProductA,numProductB,即使你目前正在做的事情被認爲是不好的做法。當您擁有1000種產品並且用戶從所有產品中訂購不同數量時會發生什麼情況。只有在產品清單是固定的(即編入應用程序)並需要大量編碼的情況下才能使用此工作。

您可能希望創建一個具有如下字段的purchase_item表:id,purchase_id,product_id,num_product。這就像標準賬單上的一行:purchase_id標識該行屬於哪個賬單; product_id將顯示該行所關注的產品,並且num_product將顯示該行上的金額(乘數)。

以這種方式,當新產品添加到數據庫時,您不需要更改代碼。

+0

不知道這是不好的做法,永遠不會超過四個產品,所以是的列表是固定的。我不需要這樣的賬單,只是爲了能夠查找客戶並查看總計。 –

0

如果您沒有詳細描述您遇到的問題,很難說如何解決這些問題。應該可以用所描述的設計來實現你想要的。然而,你似乎誤解了關係數據庫,這就是爲什麼你的數據庫架構是提高眉毛的原因。

數據庫表格不是電子表格。雖然表格可以有數百萬行,但列數通常限制在一個更小的數字。即使限制不成問題,關係數據庫的設計方式也不適合跨大量列存儲統一數據。例如,您的數據庫將無法回答諸如「最暢銷產品是什麼」,「100多個客戶購買了什麼產品」等問題。

經驗法則是每個表應該包含固定數量的列。如果您發現您需要添加列時,例如開始銷售新產品,你做錯了。

下面是你應該在你的應用程序可能做到:

  • products應與每個可用的產品一排桌子,含,對每個產品,獨特的id,價格和其他信息,如姓名,製造商等。
  • purchases對於客戶訂購產品的(客戶,產品)的每個組合應包含一行。該行包含客戶ID,產品ID和訂購數量。

使用SQL,您可以輕鬆構建一個查詢來生成特定客戶訂購的產品集。使用聯接,這些信息可以通過產品名稱和價格進行增強。

+0

產品列表是固定的,永遠不會超過4個。查看歷史或能夠回答問題不是問題,也不會是問題。我關心的是如何從兩個不同的表格中將信息讀取成兩種不同的形式。 –

+0

問題中沒有足夠的信息來說明問題是什麼。只需發出兩個SQL查詢,並在您的表單中使用它們的結果。 –

+0

好的,修改我的問題 –