通过几乎相同的ID迭代所有$ _POST

时间:2016-02-11 17:02:40

标签: php html mysql codeigniter-3

我有一个表,其行数是动态的,每个<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] => )

3 个答案:

答案 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循环条件。