我有一个表,其行数是动态的,每个<td>
个id和名称每行不同(即<tr><td id="name_1" name="name_1"></td></tr> <tr><td id="name_2" name="name_2"></td></tr>
),它通过$_POST
通过控制器中的$_POST
获取表的值。然后,我想将每个表行放在数组中,然后将其发送到模型以便在数据库中插入。
这是我控制器中的代码
public function submitPPMP(){
print_r($_POST);
$ppmp_id = $this->PPMP_model->submitPPMP();
$counter = 1;
foreach ($_POST as $key => $value){
$project_details = array(
'project_id' => $ppmp_id,
'supply_id' => $_POST['items_' . $counter],
'quantity' => $_POST['qty_' + $counter],
'price' => 1,
'jan' => $_POST['jan_' . $counter],
'feb' => $_POST['feb_' . $counter],
'mar' => $_POST['mar_' . $counter],
'apr' => $_POST['apr_' . $counter],
'may' => $_POST['may_' . $counter],
'jun' => $_POST['jun_' . $counter],
'jul' => $_POST['jul_' . $counter],
'aug' => $_POST['aug_' . $counter],
'sep' => $_POST['sep_' . $counter],
'oct' => $_POST['oct_' . $counter],
'nov' => $_POST['nov_' . $counter],
'dec' => $_POST['dec_' . $counter]
);
$counter = $counter + 1;
//send the $project_details to model and insert to database
}
print_r($project_details);
}
但是,由于我在第Undefined offset: 1
行收到'supply_id' => $_POST['items_' . $counter]
错误,我似乎无法正确使用。将每一行放入数组并将其发送到模型的正确方法是什么?
我的$_POST
数据是: -
Array ( [unit] => [category_1] => 1 [items_1] => 5 [qty_1] => 1 [jan_1] => 1 [feb_1] => [mar_1] => [apr_1] => [may_1] => [jun_1] => [jul_1] => [aug_1] => [sep_1] => [oct_1] => [nov_1] => [dec_1] => [row_2] => 1 [items_2] => 27 [qty_2] => 1 [jan_2] => 1 [feb_2] => [mar_2] => [apr_2] => [may_2] => [jun_2] => [jul_2] => [aug_2] => [sep_2] => [oct_2] => [nov_2] => [dec_2] => [row_3] => 1 [items_3] => 20 [qty_3] => 1 [jan_3] => 1 [feb_3] => [mar_3] => [apr_3] => [may_3] => [jun_3] => [jul_3] => [aug_3] => [sep_3] => [oct_3] => [nov_3] => [dec_3] => [action] => )
答案 0 :(得分:1)
我建议重组您的数据。它目前是一个平面列表,如:
Array (
[unit] =>
[category_1] => 1
[items_1] => 5
[qty_1] => 1
[jan_1] => 1
..
[row_2] => 1
[items_2] => 27
[qty_2] => 1
[jan_2] => 1
..
[row_3] => 1
[items_3] => 20
[qty_3] => 1
[jan_3] => 1
..
[action] =>
)
如果您的数据是这样的:
array(
"unit" => "",
"category" => 1,
"items" => array(
array(
"id" => 5,
"quantity" => 1,
"months" => array(
"jan" => 1
..
)
),
array(
"id" => 27,
"quantity" => 1,
"months" => array(
"jan" => 1
..
)
),
array(
"id" => 20,
"quantity" => 1,
"months" => array(
"jan" => 1
..
)
)
),
"action" => ""
)
你的逻辑会变得简单得多。构建这样的请求并不是很困难。
如果您的请求来源是HTML表单,您可以执行以下操作:
Quantity for item 1: <input type="text" name="items[0][quantity]" />
Quantity for item 2: <input type="text" name="items[1][quantity]" />
.. etc
如果您的请求的来源是PHP脚本,您可以使用http_build_query来构建格式良好的POST主体。
答案 1 :(得分:0)
由于你要在每个循环上更新计数器值,你应该从foreach循环中删除它。
$counter = 1;
foreach ($_POST as $key => $value){
//...
答案 2 :(得分:0)
它看起来像你创建的无限循环
每次foreach($ _POST为$ key =&gt; $ value)循环被触发,你的计数器再次设置为1.
将for计数变量放在for循环之外,你可以设置while或for循环条件。