繁体   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