【问题标题】:Iterate thru all $_POST with almost identical ID遍历所有具有几乎相同 ID 的 $_POST
【发布时间】:2016-02-11 17:02:39
【问题描述】:

我有一个表,它的行数是动态的,每个<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);
}

但是,我似乎无法得到正确的答案,因为我在 '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] => )

【问题讨论】:

  • $counter = 1;移到循环外,否则不算数。
  • 感谢那个,但是我仍然遇到偏移错误。似乎即使它在每个 $_POST 传递时遍历所有 $_POST 我的 $counter 增量。如何仅在具有 dec_ 名称的元素之后增加每个元素?
  • 这是帖子数据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] => )
  • 都是正确的。但是当我将它放入数组$project_details 并使用print_r($project_details) 时,这是输出Array ( [project_id] => 113 [supply_id] => [quantity] => [price] => 1 [jan] => [feb] => [mar] => [apr] => [may] => [jun] => [jul] => [aug] => [sep] => [oct] => [nov] => [dec] => )

标签: php html mysql codeigniter-3


【解决方案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 正文。

【讨论】:

  • 我正在使用我的表格所在的 HTML 表单。可以通过javascript添加一行。我怎样才能使我的$_POST 数据像那样?
  • 太完美了。让 JavaScript 在生成新行时生成动态输入名称,例如:quantity_element.name = "items[" + i + "][quantity]";。我猜现在你有类似quantity_element.name = "qty_" + i; 的东西。如果您发布您的 JavaScript 代码,我可以给出更量身定制的答案。
  • 我正在使用row.find('#items_' + oldId).attr('id', 'items_' + id).attr('name', 'items_' +id); 和这个$('#myTable').append(row); 将行附加到我的表中。
  • 所以我应该这样做row.find('#items_' + oldId).attr('id', 'items_' + id).attr('name', 'items_[' + id + '][?]);
  • 您将它们命名为'jan_[' + i + '][id]',但这是不正确的。名称应为'items[' + i + '][jan]''items[' + i + '][quantity]''items[' + i + '][feb]'
【解决方案2】:

由于您要在每个循环中更新计数器值,您应该将其从 foreach 循环中删除。

$counter = 1;
foreach ($_POST as $key => $value){
//...

【讨论】:

  • 感谢那个,但是我仍然遇到偏移错误。似乎即使它在每个 $_POST 传递时遍历所有 $_POST 我的 $counter 增量。如何仅在具有 dec_ 名称的元素之后增加每个元素?
  • 如果你把foreach里面的所有$_POST都改成$key,会起作用吗?
  • 实际上问题出在您所暗示的逻辑上。你能补充一下你想要做什么的问题吗?
  • 我正在尝试将表中每一行中的所有表数据放入一个数组中,然后将其发送到模型。请检查我的问题的编辑版本。我的$_POST 数据有一个示例。
【解决方案3】:

它看起来像你创建的无限循环,

每次触发 foreach ($_POST as $key => $value) 循环时,您的计数器都会再次设置为 1。

将计数器变量放在for循环之外,您可以放置​​一个while或for循环条件。

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 2018-09-16
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    相关资源
    最近更新 更多