2014-03-19 65 views
0

我正在開發一個發票系統。我來到了需要你幫助的地步。使用PHP從表單插入多行到MySql

我需要一次在窗體中存儲多行到MySql。

例如,這是我的代碼:

$sql="INSERT INTO invoice (client_name, client_address, client_phone, client_number, invoice_date, invoice_number, item_number, item_name, item_desc, item_quantity, item_unit, item_total, total, net_value) 
VALUES 
('$_POST[client_name]','$_POST[client_address]','$_POST[client_phone]','$_POST[client_number]','$_POST[invoice_date]','$_POST[invoice_number]','$_POST[item_number]','$_POST[item_name]','$_POST[item_desc]','$_POST[item_quantity]','$_POST[item_unit]','$_POST[item_total]','$_POST[total]','$_POST[net_value]')"; 

的形式有很多的投入明顯。不過,也有5個輸入,這將有多個值(ITEM_NUMBER,ITEM_NAME,ITEM_DESC,item_quantity和item_unit)

所以,我怎麼能實現存儲這些形式都在一個PHP $ _ POST

+0

我認爲你是在討論發票行,從技術上講,他們應該通過idinvoice循環輸入數據作爲對此表的引用來訪問不同的表 –

+0

請注意,使用mysql_real_escape_string來轉義'$ _POST'數據以防止'SQL注入' – Harry

+0

似乎你需要兩張表,一張存儲發票號碼等,一張存儲項目詳細信息 – remo

回答

0

如果你想這一切都在一個桌子那麼這裏是你的替代解決方案:

我希望你得到$ _POST ['item_number'],$ _ POST ['item_name'],$ _ POST ['item_desc'],$ _ POST ['item_quantity'],$ _ POST ['item_unit'],$ _ POST [ 'item_total']作爲POST中的數組。

首先將所有這些字段的數據類型更改爲TEXT。 然後 在插入表invoice時,您可以將它作爲json_encode($ _ POST ['item_number'])傳遞給所有這些字段。 只要你想顯示你需要json_encode這些變量。

0

我不知道是什麼你真的在這裏問。例如如果你有你的變量後,這是assocated數組值如

數組

$ _ POST [0] [CLIENT_NAME]等,那麼你可以這樣做

$sql="INSERT INTO invoice (client_name, client_address, client_phone, client_number, invoice_date, invoice_number, item_number, item_name, item_desc, item_quantity, item_unit, item_total, total, net_value) 
VALUES"; 
for($i=0; $i<sizeof($_POST);$i++){ 
if(($i+1) == sizeof($_POST)){ 
$sql .="('$_POST[$i][client_name]','$_POST[$i][client_address]','$_POST[$i][client_phone]','$_POST[$i][client_number]','$_POST[$i][invoice_date]','$_POST[$i][invoice_number]','$_POST[$i][item_number]','$_POST[$i][item_name]','$_POST[$i][item_desc]','$_POST[$i][item_quantity]','$_POST[$i][item_unit]','$_POST[$i][item_total]','$_POST[$i][total]','$_POST[$i][net_value]')"; 
}else{ 
$sql .="('$_POST[$i][client_name]','$_POST[$i][client_address]','$_POST[$i][client_phone]','$_POST[$i][client_number]','$_POST[$i][invoice_date]','$_POST[$i][invoice_number]','$_POST[$i][item_number]','$_POST[$i][item_name]','$_POST[$i][item_desc]','$_POST[$i][item_quantity]','$_POST[$i][item_unit]','$_POST[$i][item_total]','$_POST[$i][total]','$_POST[$i][net_value]'),"; 
} 
} 

然後,你可以執行$ sql變量都在一個地方。如果這不是你的意思,你可以解釋你的$ _POST變量中的數據,除此之外你已經解釋過了。

+0

我上面寫的代碼是爲了是一個非常簡單的發票系統。我只需要將所有值存儲在一張表中,但由於項目輸入(item_number,item_name,item_desc,item_quantity,item_unit)可能有多行,所以我希望能夠獲取這些值除了client_name和其他字段並將其存儲在數據庫中。順便說一句,我不知道這是否可以用一張桌子來實現,但我真的只想要一張桌子。 – user2214943

+0

如果你想這一切在一張桌子上,那麼這裏是你的替代解決方案: 我希望你得到$ _POST ['item_number'],$ _ POST ['item_name'],$ _ POST ['item_desc'], $ _POST ['item_quantity'],$ _ POST ['item_unit'],$ _ POST ['item_total']作爲POST中的數組。 首先將所有這些字段的數據類型更改爲TEXT。 然後 在插入表'invoice'時,您可以將它作爲json_encode($ _ POST ['item_number'])傳遞給所有這些字段。 只要你想顯示你需要json_encode這些變量。 –

0

我明白了,這可以通過分割數據或對數據進行規範化來完成。你真的需要兩張表格,一張是發票,另一張是項目行。

表一個 ID(AUTO_INCREMENT) CLIENT_NAME CLIENT_ADDRESS client_phone 客戶編號 invoice_date INVOICE_NUMBER invoice_total在你的榜樣,你有這個作爲你的榜樣總 invoice_net_value您有這方面的net_value

表二

id(auto_increment) table_one_id item_number ITEM_NAME ITEM_DESC item_quantity item_unit ITEM_TOTAL

插入語句將如下這將是你應該用某種分貝框架壽的真的很簡單。

$sql = "insert into table_one (client_name,client_address,client_phone,client_number,invoice_date,invoice_number,invoice_total,invoice_net_value) values('".mysql_real_escape_string($_POST['client_name'])."'",'".mysql_real_escape_string($_POST['client_phone'])."','".mysql_real_escape_string($_POST['client_number'])."','",mysql_real_escape_string($_POST['invoice_date'])."','".mysql_real_escape_string($_POST['invoice_number'])."','".mysql_real_escape_string($_POST['invoice_total'])."','".mysql_real_escape_string($_POST['invoice_net_value'])."')"; 

執行statment,然後執行以下操作:

$id = mysql_insert_id(); 

使用該ID和數據的其餘部分另做插入。

$sql = "insert into table_two (table_one_id,item_number,item_name,item_desc,item_quantity,item_unit,item_total) values"; 
for($i=0; $i<sizeof($_POST);$i++){ 
if(($i+1) == sizeof($_POST)){ 
$sql .="('$id','$_POST[$i][item_number]','$_POST[$i][item_name]','$_POST[$i][item_desc]','$_POST[$i][item_quantity]','$_POST[$i][item_unit]','$_POST[$i][item_total]')"; 
}else{ 
$sql .="('$id','$_POST[$i][item_number]','$_POST[$i][item_name]','$_POST[$i][item_desc]','$_POST[$i][item_quantity]','$_POST[$i][item_unit]','$_POST[$i][item_total]'),"; 
} 
} 
0

您需要創建拖表吧: 添加一個字段invoice_id主鍵與invoice_item表 表來聯繫:發票(INVOICE_ID,CLIENT_NAME,CLIENT_ADDRESS,client_phone,客戶編號,invoice_date,INVOICE_NUMBER)

表:invoice_item(invoice_item_id,fk_invoice_id,ITEM_NUMBER,ITEM_NAME,ITEM_DESC,item_quantity,item_unit,ITEM_TOTAL,net_value)

現在,你需要做的LOOP:

Here .... Fire query to insert into `invoice` table for the fields : invoice_id,client_name, client_address, client_phone, client_number, invoice_date, invoice_number 

- >獲得invoice表的最後插入的ID被插入到invoice_item表的字段fk_invoice_id

foreach ($_POST AS $k=>$v) 

{// 消防查詢插入到invoice_item表中的字段:invoice_item_id,fk_invoice_id,ITEM_NUMBER ,ITEM_NAME,ITEM_DESC,item_quantity,item_unit,ITEM_TOTAL,net_value }