繁体   English   中英

Codeigniter多维数组到数据库

[英]Codeigniter Multidimensional Array to Database

我试图插入一个数组到数据库表中作为单独的行。 该阵列被从表中,用户可以添加更多的行生成。 无法理解发生了什么问题!

这是视图

<table class="table table-bordered" id="parts">
  <thead class="table-success">
    <tr>
      <th class="table-success">Quantity</th>
      <th class="table-success">Parts</th>
      <th class="table-success">Fitted</th>
      <th class="table-success">Required</th>
      <th class="table-success">Cost</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <input type="hidden" name="job_no[]" value="<?php echo $job_number; ?>" />
      <td><input type="number" name="parts_qty[]" class="form-control" /></td>
      <td><input type="text" name="parts_description[]" class="form-control" /></td>
      <td><input type="text" name="parts_fitted[]" class="form-control" /></td>
      <td><input type="text" name="parts_required[]" class="form-control" /></td>
      <td><input type="text" name="parts_cost[]" class="form-control" /></td>
    </tr>
  </tbody>
</table>
<button type="button" class="btn btn-primary btn-xs" id="addRow"> <span class="glyphicon glyphicon-plus-sign" aria-hidden="true"> </span> Add Row </button>
<script>
$(document).ready(function() {
    $("#addRow").click(function(){
            $("#parts").append("<tr><input type='hidden' name='job_no[]' value='<?php echo $job_number; ?>' /><td><input type='number' name='parts_qty[]' class='form-control' /></td><td><input type='text' name='parts_description[]' class='form-control' /></td><td><input type='text' name='parts_fitted[]' class='form-control' /></td><td><input type='text' name='parts_required[]' class='form-control' /></td><td><input type='text' name='parts_cost[]' class='form-control' /></td></tr>");
        });
    });
</script>

请注意,这是较大表格的一部分,因此不显示提交按钮等

我的控制器功能如下所示

function add_parts_db()
    {
        $parts = array (
                    'job_number'    => $this->input->post('job_no'),
                    'quantity'      => $this->input->post('parts_qty'),
                    'parts'         => $this->input->post('parts_description'),
                    'fitted'        => $this->input->post('parts_fitted'),
                    'required'      => $this->input->post('parts_required'),
                    'cost'          => $this->input->post('parts_cost')
                );

                $this->service_model->add_parts_db($parts);
                redirect('service', 'refresh');
    }

这是使用表中的一些示例输入生成的数组

Array
(
    [job_number] => Array
        (
            [0] => 2008
            [1] => 2008
            [2] => 2008
        )

    [quantity] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [parts] => Array
        (
            [0] => Part 1
            [1] => Part 2
            [2] => Parts 3
        )

    [fitted] => Array
        (
            [0] => Fitted 1
            [1] => Fitted 1
            [2] => Fitted 3
        )

    [required] => Array
        (
            [0] => Required 1
            [1] => Required 2
            [2] => Required 3
        )

    [cost] => Array
        (
            [0] => 1.00
            [1] => 2.00
            [2] => 3.00
        )

)

最后,我的模型,我想该阵列的每个项目插入到数据库表作为一个单独的行。

function add_parts_db($parts)
{
    $this->db->insert_batch('parts', $parts);
    return $this->db->insert_id();
}

我希望将上述数组作为单独的行插入数据库中,因此应如下所示

在此处输入图片说明

提交表单时出现以下错误

    Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0, 1, 2) VALUES ('2008','2008','2008'), ('1','2','3'), ('Part 1','Part 2','Parts' at line 1

INSERT INTO `parts` (0, 1, 2) VALUES ('2008','2008','2008'), ('1','2','3'), ('Part 1','Part 2','Parts 3'), ('Fitted 1','Fitted 1','Fitted 3'), ('Required 1','Required 2','Required 3'), ('1.00','2.00','3.00')

Filename: models/Service_model.php

Line Number: 33

我认为问题可能出在我不太了解的jQuery / Javascript中。 我可以使用名称设置初始密钥为0 =“配件[0] [jobnumber可以]”但后来在我的jQuery的,我不认为这是正确识别变量

var $i = 1;
        $("#addRow").click(function(){
                $("#parts").append("<tr><input type='hidden' name='parts[$i][jobnumber]' value='<?php echo $job_number; ?>' /><td><input type='number' name='parts[$i][qty]' class='form-control' /></td><td><input type='text' name='parts[$i][description]' class='form-control' /></td><td><input type='text' name='parts[i][fitted]' class='form-control' /></td><td><input type='text' name='parts[$i][required]' class='form-control' /></td><td><input type='text' name='parts[$i][cost]' class='form-control' /></td></tr>");
                i++;
        });

我认为转储数组看起来像是要提取正确的数组格式,但是由于我的jQuery不够好而无法得到。

 ["parts"]=>
  array(2) {
    [0]=>
    array(5) {
      ["jobnumber"]=>
      string(4) "2002"
      ["qty"]=>
      string(1) "3"
      ["description"]=>
      string(7) "parts 3"
      ["required"]=>
      string(10) "required 3"
      ["cost"]=>
      string(4) "3.00"
    }
    ["i"]=>
    array(1) {
      ["fitted"]=>
      string(8) "fitted 3"
    }
  }

如果我第二次回复,这显示语法错误 代码错误

@Bhaumik Mehta

 Array
    (
        [0] => Array
            (
                [job_number] => 2002
                [quantity] => 1
                [parts] => parts 1
                [fitted] => Fitted 1
                [required] => Required 1
                [cost] => 1.00
            )

        [1] => Array
            (
                [job_number] => 2002
                [quantity] => 2
                [parts] => Part 2
                [fitted] => Fitted 2
                [required] => Required 2
                [cost] => 2.00
            )

        [2] => Array
            (
                [job_number] => 2002
                [quantity] => 3
                [parts] => Parts 3
                [fitted] => Fitted 3
                [required] => Required 3
                [cost] => 3.00
            )

    )

你组织你的阵列的方式是错误的,你正在尝试做的,因为你是为每个数据库列数组结束了,你要的是为每一个数据库行的一个数组。

取而代之的是,您将零件描述添加到数组中

<td><input type="text" name="parts_description[]" class="form-control" /></td>

您需要这样的东西:

<td><input type="text" name="job[$i][parts_description]" class="form-control" /></td>

其中第一行的$i=0 ,然后在jQuery函数添加的每一行中加1。

这样,您将结束与$_POST['job']包含与对应的单排每一个你的桌子上,多个阵列变量然后你可以遍历插入到数据库,

虽然此解决方案可能会派上用场。 这不是理想的解决方案。

function add_parts_db()
    {
        $parts = array (
                    'job_number'    => $this->input->post('job_no'),
                    'quantity'      => $this->input->post('parts_qty'),
                    'parts'         => $this->input->post('parts_description'),
                    'fitted'        => $this->input->post('parts_fitted'),
                    'required'      => $this->input->post('parts_required'),
                    'cost'          => $this->input->post('parts_cost')
                );

           $partsArr = [];
           $totalCnt = count($parts['job_number']);
          for($key=0; $key < $totalCnt ;$key++)
          {
           $partsArr[] = [
              'job_number' => $parts['job_number'][$key] , 
              'quantity'   => $parts['quantity'][$key] , 
              'parts'      => $parts['parts'][$key] , 
              'fitted'     => $parts['fitted'][$key] , 
              'required'   => $parts['required'][$key] , 
              'cost'       => $parts['cost'][$key]]; 

           }
            //just make sure that your service_model uses `insert_batch` method to  insert data
            $this->service_model->add_parts_db($partsArr);
            redirect('service', 'refresh');
     }

有关更多信息,请阅读文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM