插入多个项目到数据库不工作codeigniter
我想插入项目到数据库中,它不工作。结帐按钮会将我重定向到结帐页面,但页面上的所有信息都不会保存/插入到数据库中。我不知道是什么原因造成的。插入多个项目到数据库不工作codeigniter
控制器:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class CheckOut extends CI_Controller {
function __construct() {
parent::__construct();
// Load url helper
}
public function index(){
$this->load->helper('url');
$this->load->view('base');
$this->load->view('checkOut');
}
function insert(){
$adminID=$this->input->post('adminID');
$customerID=$this->input->post('customerID');
$dateOut=$this->input->post('dateOut');
$dateDue=$this->input->post('dateDue');
$inventoryID=$this->input->post('inventoryID');
$count = count($this->input->post['inventoryID']);
for($i=0; $i<$count; $i++) {
$data = array(
'inventoryID' => $inventoryID[$i],
'adminID' => $adminID,
'customerID' => $customerID,
'dateOut' => $dateOut,
'dateIn' => $dateDue,
);
print_r($data);
$this->db->insert('loan', $data);
}
$this->load->view('base');
redirect('checkOut/index');
}
} ?>
查看:
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="<?php echo base_url(); ?>checkIn.css">
<title>Check Out Items</title>
</head>
<body>
<h1><center>Check Out Items</center></h1><hr>
<div class="container">
<form class="form-horizontal" method='post' role="form" data-parsley-validate="" id="checkOut" action="<?php echo site_url("checkOut/insert"); ?>">
<div class="row personal-info" id="checkOutForm">
<div class="col-sm-4">
<div class="form-group">
<label>Administrator ID:</label>
<input type="text" class="form-control" id="adminID" name="adminID" placeholder="Admin ID">
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label>Customer ID:</label>
<input type="text" class="form-control" id="customerID" name="customerID" placeholder="Customer ID">
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label>Today's Date:</label>
<input type="date" class="form-control" id="dateOut" name="dateOut" placeholder="Date Out">
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label>Due Date:</label>
<input type="date" class="form-control" id="dateDue" name="dateDue" placeholder="Date Due">
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label>Inventory ID:</label>
<div class="input_fields_wrap">
<div><input type="text" name="inventoryID[]" placeholder="RFID">
<button class="add_field_button">Add More Fields</button></div>
</div>
</div>
</div>
</div>
<br>
<div class="form-group" style="text-align:center;">
<input class="btn btn-primary" type="submit" name="checkOut" value="Check Out">
</div>
</form>
</div>
</body>
<script>
$(document).ready(function() {
var max_fields = 10; //maximum input boxes allowed
var wrapper = $(".input_fields_wrap"); //Fields wrapper
var add_button = $(".add_field_button"); //Add button ID
var x = 1; //initlal text box count
$(add_button).click(function(e){ //on add input button click
e.preventDefault();
if(x < max_fields){ //max input box allowed
x++; //text box increment
$(wrapper).append('<div><input type="text" name="inventoryID[]"/><a href="#" class="remove_field">Remove</a></div>'); //add input box
}
});
$(wrapper).on("click",".remove_field", function(e){ //user click on remove text
e.preventDefault(); $(this).parent('div').remove(); x--;
})
});
</script>
</html>
感谢您的帮助
我可以看到错误代码。
当你使用数组字段时,你可以简单地使用像下面描述的。
function insert(){
$adminID=$this->input->post('adminID');
$customerID=$this->input->post('customerID');
$dateOut=$this->input->post('dateOut');
$dateDue=$this->input->post('dateDue');
$inventoryID=$this->input->post('inventoryID');
$ids = $this->input->post('inventoryID');
foreach($ids as $id):
$data = array(
'inventoryID' =>$id,
'adminID' => $adminID,
'customerID' => $customerID,
'dateOut' => $dateOut,
'dateIn' => $dateDue,
);
$this->db->insert('loan', $data);
$data = array();
endforeach;
$this->load->view('base');
redirect('checkOut/index');
}
让我知道,如果它不起作用。
也许你应该INSERT
数据首先建立自己的数据库,然后只用insert_batch()
不是多个中执行一个查询insert()
在你的循环中。 inventoryID
阵列没有匹配0到$count
的密钥,并在循环内部产生一个错误,使您的$data
数组为空。使用foreach
解决了这个问题。
所以不是
for($i=0; $i<$count; $i++) {
$data = array(
'inventoryID' => $inventoryID[$i],
'adminID' => $adminID,
'customerID' => $customerID,
'dateOut' => $dateOut,
'dateIn' => $dateDue,
);
print_r($data);
$this->db->insert('loan', $data);
}
你能尝试
$data = array();
foreach($inventoryID as $v) {
array_push($data, array(
'inventoryID' => $v,
'adminID' => $adminID,
'customerID' => $customerID,
'dateOut' => $dateOut,
'dateIn' => $dateDue,
));
}
print_r($data);
$this->db->insert_batch('loan', $data);
我得到这个错误“insert_batch()调用没有数据” –
您是否在批量插入之前使用'print_r($ data);'获得正确的数据数组? –
您的'inventoryID'数组可能没有从0开始的键,因此使用'foreach'是您的解决方案,但我仍然会将两个答案合并到您的案例中,并且只使用一个查询将数据插入数据库。现在尝试一下,看看它是如何发展的,也许你会希望随时检查一下,看看哪种方式更快。在一个插入的大数组的循环中插入多个插入? –
你的代码看起来很好,CI将'array'或'object'作为插入参数。 https://www.codeigniter.com/userguide3/database/query_builder.html你是否尝试过一个对象而不是数组或试图填充循环内的所有值,并使用'$ this-> db- > insert_batch()'? –