Php 使用几乎相同的ID遍历所有$\u POST

Php 使用几乎相同的ID遍历所有$\u POST,php,html,mysql,codeigniter-3,Php,Html,Mysql,Codeigniter 3,我有一个表,它的行数是动态的,每行的id和名称不同(即,),通过$\u POST 通过控制器中的$\u POST获取表格值后。然后,我希望将每个表行放入数组中,然后将其发送到模型以插入数据库中 这是我控制器中的代码 public function submitPPMP(){ print_r($_POST); $ppmp_id = $this->PPMP_model->submitPPMP(); $counter = 1; foreach ($_POST

我有一个表,它的行数是动态的,每行的id和名称不同(即,
),通过
$\u POST

通过控制器中的
$\u 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);
}
但是,我似乎无法获得正确的偏移量,因为我在
$\u POST['items.'$counter]
处得到了一个
未定义的偏移量:1
错误。将每一行放入数组并将其发送到模型的正确方法是什么

我的
$\u 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($\u 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
项目1的数量:
第2项的数量:
.. 等

若您的请求源是一个PHP脚本,那个么您可以使用它来构建一个格式良好的帖子正文在循环之外,否则你就不算了。谢谢你这么做,但是我还是得到了一个偏移量错误。看起来,即使它在通过所有
$\u POST
my
$计数器
时,每次通过
$\u POST
都会以增量进行迭代。如何只在元素名后增加一次?这是post data
Array([unit]=>[category\u 1]=>1[items\u 1]=>5[qty\u 1]=>1[jan\u 1]=>1[feb\u 1]=>1[mar\u 1]=>[apr\u 1]=>[may\u 1]=>[jun\u 1]=>[jun\u 1]=>8月1]=>9月1]=>10月1]=>11月1]=>12月2行[qty\u]=>[jan\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>[9月3日]=>[10月3日]=>[11月3日]=>[12月3日]=>[action]=>)
这一切都是正确的。但是当我把它放进数组
$project\u details
并使用
print\r($project\u details)
这是输出
数组([project\u id]=>113[supply\u id]=>[quantity]=>[price]=>1[jan]=>[feb]=>[mar]=>[apr]=>[may]=>[jun]=>
谢谢你的建议,但是我仍然得到了一个偏移量错误。即使它正在迭代所有的
$\u POST
我的
$计数器
在每个
$\u POST
传递时都会递增。如果你在foreac中更改所有
$\u POST
的话,我如何只在元素的
dec
名称之后递增h使用
$key
,它会工作吗?实际上问题在于你在那里暗示的逻辑。你能给问题添加你想做的吗?我试图将表中每一行的所有表数据放入一个数组,然后将其发送到模型。请检查我问题的编辑版本。这是我的
$\u POST数据。我在表格所在的位置使用HTML表单。一行可以通过javascript添加。我如何才能使我的
$\u POST
数据像这样?那太好了。让javascript在生成新行时生成动态输入名称,如:
quantity\u element.name=“items[“+I+”][quantity]”
。我猜你现在有了类似于
quantity\u element.name=“qty\u”+I;
的东西。如果你发布JavaScript代码,我可以给出一个更定制的答案。我正在使用
row.find(“#items\u”+oldId)。attr('id”,“items\u”+id)。attr('name”,“items\u”+id);
和这个
$('myTable')。append(row)
将行附加到我的表中。那么我是否应该将其设为
行。查找('#items.'+oldId).attr('id','items.'+id'+id.).attr('name','items.['+id+'][?);
您将它们命名为
'jan.['+i+']id'
,但这是不正确的。名称应该是
'items['+i+']jan].
'items[+i+]“
”项目['+i+'][feb]'
等。