簡體   English   中英

PHP中的發票和計費系統

[英]Invoicing and Billing System in PHP

我已經制作了一個腳本來創建訂單和創建發票。 這是兩個mysql表tbl_order和tbl_invoice。

tbl_invoice:

`id`, `customer_id`, `status`, `invoicedate`, `total`, `payment_method`, `duedate`, `paiddate`, `details`, `order_id`

tbl_order

`id`, `customer_id`, `status`, `orderdate`, `invoice_id`, `total`, `reseller`, `nextdue`

因此,基本上,在客戶單擊付款后下訂單時,它將在tbl_invoice中生成發票並將訂單詳細信息添加到tbl_order。

但是,在tbl_invoice中,它們是一個稱為“ order_id”的字段,在tbl_order中,它們是一個稱為“ invoice_id”的字段。

當客戶單擊“繼續付款”時(因為它同時生成發票和訂單),我使用以下腳本來更新兩個表:

$invoice = mysql_query("INSERT INTO `tbl_invoice` (customer_id, status, invoicedate, payment_method, total, duedate) VALUES ('$client', '$status', '$date', '$method', '$total', '$duedate')") or die("Failed to connect invoice query " .mysql_error());


$order = mysql_query("INSERT INTO `tbl_order` (customer_id, status, total, orderdate) VALUES ('$client', '$status', '$total', '$date')") or die("Failed to connect order query " .mysql_error());

$invoice_query =mysql_query("SELECT * FROM `tbl_invoice` ORDER BY `id` DESC LIMIT 1" .mysql_error());
$invoice_result = mysql_fetch_assoc($invoice_query);
$invoice_id = $invoice_result['id'];

$order_query =mysql_query("SELECT * FROM `tbl_order` ORDER BY `id` DESC LIMIT 1" .mysql_error());
$order_result = mysql_fetch_assoc($order_query);
$order_id = $order_result['id'];

$invoice = mysql_query("UPDATE `tbl_invoice` SET `order_id` = '$order_id' ORDER BY `id` DESC LIMIT 1") or die("Failed to connect invoice query 1" .mysql_error());
$order = mysql_query("UPDATE `tbl_order` SET `invoice_id` = '$invoice_id' ORDER BY `id` DESC LIMIT 1") or die("Failed to connect order query 1 " .mysql_error());

它是這樣工作的:

  • 首先,它正在生成發票。 (order_id字段保持為空)
  • 然后,它生成一個訂單。 (發票編號字段為空)
  • 使用$ invoice_query我將最后一行(通過使用ORDER BY id DESC LIMIT 1)添加到發票表中,然后使用這樣生成的訂單ID更新“ order_id”。

  • 使用$ order_query我將最后一行添加到訂單表中,然后使用這樣生成的發票ID更新“ invoice_id”。

現在,如果特定的第二個客戶創建訂單和發票,就會出現問題,這將導致錯誤的數據進入錯誤的字段。

誰能建議我一種更新這些表的更好方法?

這里的循環關系-發票是指訂單,而訂單是指發票。 在關系數據庫設計中,這是非常糟糕的反模式。 而且,僅當通過外鍵放棄關系實施時才可以實現(在您的情況下) 因此,您可能最終會導致數據不一致。 在與客戶(和公司)的錢有關的領域,這有多好?

畢竟,您是否曾經問過自己,為什么您可能需要這種周期性關系?

我可以猜測即時答案是“我不知道”,然后是“我實際上不需要它!”。 :-)

所以建議是-重建數據庫,使關系成為單向

例如,發票與訂單綁定-似乎更合乎邏輯,因為存在一定時間段,但尚未下達訂單,但基本上沒有關系,因為這里有1:1

然后通過在發票表中的order_id中使用外鍵來實施它。

或者-再一次,只要您在此處具有1:1關系-將發票和訂單合並到一個表中並立即創建記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM