我有一个发票表单,它会将多行发布到插入页面以插入多行。我的绊脚石是,当我使用 foreach 语句插入多个订单项目时,我还插入了每一行的发票总额。我将如何仅在我选择的列中插入的最后一行插入例如“发票总金额”。
我已经附上了我用来插入表单的代码,在提到它之前,为了清楚起见,我已经删除了对数据清理函数的调用。
<?php
//Lets connect to the database
if(mysqli_connect_errno()){
exit("Failed to connect to the database".mysqli_connect_error());}
//We first insert the header line of the purchase invoice, then we get the insert id and switch to the details table and insert
//the purchased items details
$query ="INSERT INTO acc_posting_headers (company_id,supplier_id,header_ref,header_date,header_type,posting_ref,due_date)
values
('$company_id','$supplier_id','$receipt_ref','$invoice_date','$header_type','$syspost_ref','$due_date')";
//Execute the $sql query on the server to insert the values
if ($conn->query($query) === TRUE) {
$last_post_header_id = $conn->insert_id;
$post_header_id = $last_post_header_id;
/* We have now switched to the details table, so we got the last insert id, we have set the variable
$post header and now insert each purchased item */
foreach ($_POST['lst_nominal_code'] as $row=>$id){
$nominal_code = $_POST['hidden_nominal_code'][$row];
$quantity = $_POST['txt_quantity_'][$row];
$item_cost = $_POST['txt_item_cost'][$row];
$line_total = $_POST['txt_line_total'][$row];
$description = $_POST['txt_description'][$row];
$trade_creditors = 2109;
$invoice_gross = $_POST['txt_gross'];
$vat_line = $_POST['txt_line_vat_'][$row];
$nominal_id = $id;
$subtotal = $_POST['txt_subtotal'];
$vat_total = $_POST['txt_vat_total'];
$vat_control = 2200;
$query = ("INSERT INTO acc_posting_details
(post_header_id,nominal_acc_no,quantity,price,line_total,line_vat,vat_total,description,subtotal,debit,credit)
VALUES
('$post_header_id','$nominal_code','$quantity','$item_cost','$line_total','$vat_line','0','$description','$subtotal','$line_total','0'),
('$post_header_id','$vat_control','0','0','0','$vat_total','total VAT','vat content','0','$vat_total','0'),
('$post_header_id','$trade_creditors','0','0','0','0','0','trade Creditors','0','0','$invoice_gross')");
if ($conn->query($query) === TRUE) {
Header("Location:../add_purchase_invoice.php");
} else {
echo 'Error: '. $conn->error;
}
}
}
$conn->close();
?>
<?php
// echo "<pre>";
// print_r($_POST);
// echo "<pre>";
//echo "vat control".$vat_control;
//echo "vat total is:".$vat_total
?>
解决了,一旦我仔细看了一下,通过改变插入的顺序并从“foreach”中删除,我用下面的代码实现了我想要的。感谢所有帮助。
<?php session_start();?>
<?php require_once('../Connections/connpay.php'); ?>
<?php require_once('../functions/global_functions.php'); ?>
<?php require_once('../functions/account_functions.php'); ?>
<?php
$supplier_id = clean_data($_POST['lst_supplier']);
$receipt_ref = clean_data($_POST['txt_receipt_ref']);
$invoice_date = clean_data($_POST['txt_receipt_date']);
$due_date = clean_data ($_POST['txt_receipt_due']);
$due_date = clean_data($_POST['txt_receipt_due']);
$company_id = clean_data($_POST['hidden_company_id']);
$syspost_ref = clean_data($_POST['txt_post_ref']);
$header_type = "puchase_invoice";
$nominal_id = clean_data($_POST['lst_nominal_code']);
?>
<?php
//Lets connect to the database
if(mysqli_connect_errno()){
exit("Failed to connect to the database".mysqli_connect_error());}
//We first insert the header line of the purchase invoice, then we get the insert id and switch to the details table and insert
//the purchased items details
$query ="INSERT INTO acc_posting_headers (company_id,supplier_id,header_ref,header_date,header_type,posting_ref,due_date)
values
('$company_id','$supplier_id','$receipt_ref','$invoice_date','$header_type','$syspost_ref','$due_date')";
//Execute the $sql query on the server to insert the values
if ($conn->query($query) === TRUE) {
// we now get the last insert id, and set it to a variable, we also declare the vat & gross amount variables
$last_post_header_id = $conn->insert_id;
$post_header_id = $last_post_header_id;
$vat_control = 2200;
$vat_total = clean_data($_POST['txt_vat_total']);
$trade_creditors = 2109;
$invoice_gross = clean_data($_POST['txt_gross']);
//We are now at the posting details table, we insert the trade creditors and total vat cr amounts first.
$query = ("INSERT INTO acc_posting_details
(post_header_id, nominal_acc_no ,quantity,price,line_total,line_vat,vat_total,description,subtotal,debit,credit)
VALUES
('$post_header_id','$trade_creditors','0','0','0','0','0','trade Creditors','0','0','$invoice_gross'),
('$post_header_id','$vat_control','0','0','0','$vat_total','0','vat content','0','$vat_total','0')");
$conn->query($query);
// Now that we have inserted the two lines to show the trade creditors and vat CR and DR amounts we
//carry on and insert each invoice line from the posted array.
foreach ($_POST['lst_nominal_code'] as $row=>$id){
$nominal_code = $_POST['hidden_nominal_code'][$row];
$quantity = clean_data($_POST['txt_quantity_'][$row]);
$item_cost = clean_data($_POST['txt_item_cost'][$row]);
$line_total = clean_data($_POST['txt_line_total'][$row]);
$description = clean_data($_POST['txt_description'][$row]);
$vat_line = clean_data($_POST['txt_line_vat_'][$row]);
$nominal_id = $id;
$subtotal = clean_data($_POST['txt_subtotal']);
$query = ("INSERT INTO acc_posting_details
(post_header_id, nominal_acc_no ,quantity,price,line_total,line_vat,vat_total,description,subtotal,debit,credit)
VALUES
('$post_header_id','$nominal_code','$quantity','$item_cost','$line_total','$vat_line','0','$description','0','$line_total','0')");
// execute the insert query and push on to the purchase invoice page.
if ($conn->query($query) === TRUE) {
Header("Location:../add_purchase_invoice.php");
} else {
echo 'Error: '. $conn->error;
}
}
}
$conn->close();
?>
<?php
//echo "<pre>";
// print_r($_POST);
// echo "<pre>";
?>