如何在 Codeigniter 中插入动态数据?

Posted

技术标签:

【中文标题】如何在 Codeigniter 中插入动态数据?【英文标题】:How to insert dynamic data in Codeigniter? 【发布时间】:2018-12-21 11:29:52 【问题描述】:

我只想将动态生成的输入字段数据插入数据库。我的数据库表有三个字段,id(Auto Increment)、product_name 和 rate。我正在尝试使用动态生成的输入字段将批量数据插入数据库,我可以在其中手动添加/删除输入字段。 我将输入字段创建为

<input class="form-control" placeholder="Product Name" name="prodname[]" type="text">
<input class="form-control" placeholder="Product Rate" name="prodrate[]" type="text">

这是我下面的控制器

function Act_AddProducts() 
        if ( $this->input->post( 'prodname' )&&$this->input->post( 'prodrate' )) 
            foreach ( $this->input->post( 'prodname' ) as $key => $value ) 

                $this->ProductModel->add_products( $value );
            

        

模型函数如下

function add_products($val)
  
      if($this->db->insert('tbl_product_master', array('product_name' => $val)))
      
        return true;
      
      else
      
        return false;
      
  

现在该值被插入到 db 中,但一次插入一个。所以请帮我找出代码的问题。另外我不太明白如何将 prodrate[] 值插入到同一个插入查询中。

【问题讨论】:

【参考方案1】:

希望对您有所帮助

你的控制器 Act_AddProducts 应该是这样的:

function Act_AddProducts() 

   $prodnames = $this->input->post( 'prodname' );
   $prodrates = $this->input->post( 'rate' );
    if ( ! empty($prodnames) && ! empty($prodrates) ) 
    
        foreach ($prodnames as $key => $value ) 
        
            $data['product_name'] = $value;
            /* make sure product_rate columns is correct i just guess it*/
            $data['product_rate'] = $prodrates[$key];
            $this->ProductModel->add_products($data);
        

     

你的模型add_products应该是这样的:

function add_products($data)

   if ( ! empty($data))
   
      $this->db->insert('tbl_product_master', $data);
   

【讨论】:

确保 product_rate 列的名称是 product_rate 否则将其更改为控制器,因为您没有给出速率列名称 你的意思是 function add_products($data) in model? 我试过你的代码,但只有第一个值插入到数据库中。 产品费率的列名称是什么?你有什么错误吗? 列名没问题,我没有收到任何错误。【参考方案2】:

如果您想上传批量记录,请使用 insert_batch 而不是简单的插入 你的控制器应该是

function Act_AddProducts() 

$product_rate = $_POST['prodrate'];
$product_name = $_POST['prodname'];

if(!empty($product_rate) && !empty($product_rate))
$data_array = array();
  foreach ($product_rate as $key => $value ) 
         
            $tmp_array = array();
            $tmp_array['product_name'] = $value;
            $tmp_array['product_rate'] = $product_rate[$key];
      $data_array[] = $tmp_array;
        
   $this->ProductModel->add_products($data_array);

型号应该是

function add_products($data)
  


      if($this->db->insert_batch('tbl_product_master', $data))
      
        return true;
      
      else
      
        return false;
      
  

【讨论】:

你在哪里调用模型在你的答案控制器? 对不起,我忘了调用模型刚刚编辑的代码。 不,不是变量名的问题。它不会在 foreach 内跳动,也不会从表单中获取数组。你认为我在 View 中遗漏了什么吗? 请在提交 echo '
' 后将此功能放在功能顶部并短时间分享屏幕; print_r($_POST);退出;
【参考方案3】:

仅供参考.... 一个简单的动态插入示例代码。

defined('BASEPATH') OR exit('No direct script access allowed');
class Checking extends CI_Controller 
public function index()
 
echo "<form method='post' action='". base_url("Checking/save") ."'>";
    for($i=0;$i<=5;$i++)
    
            echo "<input type='text' name='input_text[]'>";
    
    echo "<button type='submit'>Submit</button></form>";


public function save()
    foreach($this->input->post("input_text") as $Row)
        $this->db->insert("checking",array("input_text"=>$Row['input_text']));
    


创建一个控制器作为 Checking.php,然后运行它......你会明白的

对于数据库

CREATE TABLE `checking` (
`ch` int(11) NOT NULL AUTO_INCREMENT,
`input_text` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ch`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8

【讨论】:

为了即时目的,我在控制器中做了所有事情,只是把这个作为一个样本来获得一些想法,因为你是一个新手。在模型内部做插入部分【参考方案4】:

试试这个

控制器

function Act_AddProducts() 
$product_rate = $data = array();

$product_rate = $this->input->post( 'prodrate' );
$product_name = $this->input->post( 'prodname' )
        if ( !empty($this->input->post( 'prodname' ))&&!empty($this->input->post( 'prodrate' ))) 
            foreach ( $product_name as $key => $value ) 
            $data['product_name'] = $value;
            $data['product_rate'] = $product_rate[$key];
                $this->ProductModel->add_products($data);
            

        

型号

      function add_products($data)
  
        $product_name = $data['product_name'];
        $product_rate = $data['product_rate'];
      if($this->db->insert('tbl_product_master', array('product_name' => $product_name,'product_rate' => $product_rate)))
      
        return true;
      
      else
      
        return false;
      
  

【讨论】:

【参考方案5】:

只需将输入值原样传递给模型,然后在模型中使用 foreach

function add_products($val)

   foreach ( $val as $key => $value ) 

            $this->db->insert('tbl_product_master', array('product_name' => $value );
        

【讨论】:

好的,我试试。您还可以展示如何插入 Rate 吗? 不,它不工作。仅插入第一个输入值。 不要在模型中使用return insert foreach ...即使删除模型后,也只有一个数据正在插入...我可以提供示例代码...但是在此代码中而不是模型I在控制器中制作所有内容......只需通过它

以上是关于如何在 Codeigniter 中插入动态数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用codeigniter 4框架在mysql数据库中插入多行?

如何在 Codeigniter 中的数据库中插入数组?

如何在codeigniter中使用ajax在mysql数据库中插入数据?

如何使用 CodeIgniter 在数据库中插入多个值?

如何使用codeigniter在数据库中插入图像

如何在 CodeIgniter 4 中保存到数据库后获取插入 ID