插入多个项目到数据库不工作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> 

感谢您的帮助

+0

你的代码看起来很好,CI将'array'或'object'作为插入参数。 https://www.codeigniter.com/userguide3/database/query_builder.html你是否尝试过一个对象而不是数组或试图填充循环内的所有值,并使用'$ this-> db- > insert_batch()'? –

我可以看到错误代码。

当你使用数组字段时,你可以简单地使用像下面描述的。

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); 
+0

我得到这个错误“insert_batch()调用没有数据” –

+0

您是否在批量插入之前使用'print_r($ data);'获得正确的数据数组? –

+0

您的'inventoryID'数组可能没有从0开始的键,因此使用'foreach'是您的解决方案,但我仍然会将两个答案合并到您的案例中,并且只使用一个查询将数据插入数据库。现在尝试一下,看看它是如何发展的,也许你会希望随时检查一下,看看哪种方式更快。在一个插入的大数组的循环中插入多个插入? –