使用PHP将表单中的多行插入MySql

时间:2014-03-19 11:45:55

标签: 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

中存储这个表单

4 个答案:

答案 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这些变量。