遍历所有具有几乎相同 ID 的 $_POST
Iterate thru all $_POST with almost identical ID
我有一个 table,它的行数是动态的,每个 <td>
id 和名称每行不同(即 <tr><td id="name_1" name="name_1"></td></tr> <tr><td id="name_2" name="name_2"></td></tr>
),它通过 $_POST
在控制器中获取 table 到 $_POST
的值之后。然后我想将每个 table 行放入数组中,然后将其发送到模型以插入到数据库中。
这是我控制器中的代码
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);
}
但是,我似乎无法得到正确的结果,因为我在第 'supply_id' => $_POST['items_' . $counter]
行收到 Undefined offset: 1
错误。将每一行放入数组并将其发送到模型的正确方法是什么?
我的$_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] => )
由于您要在每个循环中更新计数器值,因此您应该将其从 foreach 循环中删除。
$counter = 1;
foreach ($_POST as $key => $value){
//...
看起来你创建了一个无限循环,
每次触发 foreach ($_POST as $key => $value) 循环时,您的计数器都会再次设置为 1。
将计数器变量放在 for 循环之外,您可以放置一个 while 或 for 循环条件。
我建议重组您的数据。它目前是一个平面列表,如:
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-body。
我有一个 table,它的行数是动态的,每个 <td>
id 和名称每行不同(即 <tr><td id="name_1" name="name_1"></td></tr> <tr><td id="name_2" name="name_2"></td></tr>
),它通过 $_POST
在控制器中获取 table 到 $_POST
的值之后。然后我想将每个 table 行放入数组中,然后将其发送到模型以插入到数据库中。
这是我控制器中的代码
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);
}
但是,我似乎无法得到正确的结果,因为我在第 'supply_id' => $_POST['items_' . $counter]
行收到 Undefined offset: 1
错误。将每一行放入数组并将其发送到模型的正确方法是什么?
我的$_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] => )
由于您要在每个循环中更新计数器值,因此您应该将其从 foreach 循环中删除。
$counter = 1;
foreach ($_POST as $key => $value){
//...
看起来你创建了一个无限循环,
每次触发 foreach ($_POST as $key => $value) 循环时,您的计数器都会再次设置为 1。
将计数器变量放在 for 循环之外,您可以放置一个 while 或 for 循环条件。
我建议重组您的数据。它目前是一个平面列表,如:
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-body。