我正在开发发票系统。我来到了需要你帮助的地方。
我需要一次将表格中的多行存储到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 :(得分:0)
我不确定你在这里问的是什么。例如,如果你有你的post变量,那是一个关联数组值的数组,如
$ _ 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变量中的数据,那么你已经解释过了。
答案 1 :(得分:0)
我知道,通过拆分数据或规范化数据可以做得更好。您确实需要两个表格用于发票,另一个表格用于项目行。
表一 id(auto_increment) 客户名称 CLIENT_ADDRESS client_phone 客户编号 发票日期 发票编号 您的示例中的invoice_total是总计 您的示例中的invoice_net_value将其设为net_value表二
id(auto_increment) table_one_id 项目编号 项目名称 ITEM_DESC item_quantity item_unit ITEM_TOTAL
你的插入语句将如下所示,这将非常简单,你应该使用某种db框架。
$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'])."')";
执行判断,然后执行以下操作:
$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]'),";
}
}
答案 2 :(得分:0)
您需要为它创建两个表:
添加一个字段invoice_id
主键以与invoice_item表相关联
表:invoice(invoice_id,client_name,client_address,client_phone,client_number,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
- &GT;获取要插入到字段invoice
的invoice_item表中的fk_invoice_id
表的最后一个插入ID
foreach ($_POST AS $k=>$v)
{ //在invoice_item表中插入字段的fire查询:invoice_item_id,fk_invoice_id,item_number,item_name,item_desc,item_quantity,item_unit,item_total,net_value }
答案 3 :(得分:0)
如果您想将这一切都放在一个表中,那么这里是您的替代解决方案:
我希望你得到$ _POST [&#39; item_number&#39;],$ _ POST [&#39; item_name&#39;],$ _ POST [&#39; item_desc&#39;],$ _ POST [ &#39; item_quantity&#39;],$ _ POST [&#39; item_unit&#39;],$ _ POST [&#39; item_total&#39;]作为POST中的数组。
首先将所有这些字段的数据类型更改为TEXT。
然后
插入表invoice
时,您可以将其作为json_encode($ _ POST [&#39; item_number&#39;])传递给所有这些字段。
无论何时你想要它显示你都需要json_encode这些变量。