[英]Insert multiple rows in to mysql and restrict one of the rows to be entered only once
我有一個發票表格,該表格將多行發布到插入頁面以插入多行。我的絆腳石是,當我用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>";
?>
聽起來您的核心挑戰是確定何時進入foreach循環的最后一次迭代,以便隨后可以修改查詢。 那正確嗎?
您可以使用計數器來提供幫助。 遵循以下原則:
$i = 0;
$len = count($_POST['lst_nominal_code']);
foreach ($_POST['lst_nominal_code'] as $row=>$id) {
// Assign (don't forget to sanitize!) all the POST variables
<snip>
if ($i == $len - 1) {
// This is the last line! We want a different query, with $invoice_gross included
$query = "...";
} else {
// This is NOT the last line, use the default query without $invoice_gross
$query = "...";
}
$conn->query($query);
$i++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.