[英]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.