Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用codeigniter在mysql中插入多个复选框值_Php_Codeigniter - Fatal编程技术网

Php 如何使用codeigniter在mysql中插入多个复选框值

Php 如何使用codeigniter在mysql中插入多个复选框值,php,codeigniter,Php,Codeigniter,我是codeigniter的新手。我试图插入多个新闻,其中包含一些复选框,其值从数据库循环。但我不知道应该在控制器和模型中为此编写什么代码来插入值。有人能建议或帮助我写代码吗 查看-content.php: //category name <?php foreach($result as $aresult) { ?> <input type="checkbox" name="category_name[]" value="<?php echo $aresult-&

我是codeigniter的新手。我试图插入多个新闻,其中包含一些复选框,其值从数据库循环。但我不知道应该在控制器和模型中为此编写什么代码来插入值。有人能建议或帮助我写代码吗

查看-content.php

//category name
<?php foreach($result as $aresult) { ?>
    <input type="checkbox" name="category_name[]" value="<?php echo $aresult->category_name;?>" /> <?php echo $aresult->category_name;?>
<?php  } ?>
型号:

public function save_content($data)
{
    $this->db->insert('content',$data);
}
数据库结构:

id(auto incr.), category_name(varchar 50),  content_headline(varchar 100) 

现在,我应该如何更改以使用复选框插入多行?这里还有另一个文本框/列,也插入到数据库中。但对于所有值,只应更改类别名称(复选框值)

首先,您需要调整数据库结构。显然,
内容
类别
之间存在着M:N关系。更合适的模式是:

create table content (
  id int not null auto_increment primary key,
  content_headline varchar(100) not null
  );

create table category (
  id int not null auto_increment primary key,
  caregory_name varchar(100) not null
  );

create table content_category (
  content int not null references content,
  category int not null references category,
  primary key (content,category)
  );
然后,您需要调整代码以反映新的模式

假设您从一个
select*from category
中获得
$result
,您的视图将归结为:

<label>
  Headline:
  <input type='text' name='headline'>
</label>
<?php foreach($result as $aresult): ?>
  <label>
    <input type="checkbox" name="category[<?php echo $aresult->id; ?>]">
    <?php echo $aresult->category_name; ?>
  </label>
<?php endforeach; ?>
…其中45和6是选中的类别ID。请注意,如果未选中任何类别,则不会定义
类别
数组

因此控制器变为:

public function savecontent()
  {         
  $post=$this->input->post();
  $selected_cats=(isset($post->category)?array_keys($post->category):array());
  $data=array(
    'headline'=>$post->headline,
    'category'=>$selected_cats
    );
  $this->co_model->save_content($data);
  }
最后,模型:

public function save_content($data)
  {
  $this->db->insert('content',array('content_headline',$data['headline']);
  $content=$this->db->insert_id(); // what we inserted
  foreach($data['category'] as $cat)
    $this->db->insert(
      'content_category',
      array(
        'content'=>$content,
        'category'=>$cat
        )
      );
  }

我没有完全理解最后一部分。请将所有相关代码与数据库结构一起发布。编辑的问题可能重复。请检查(geomagas)Hmmm not qoute。显然,还有另一个表包含类别,即用于生成视图的类别。我们也需要那个!:)不需要在循环中执行多个插入。insert语句可以接受多个值集。只需编写原始sql,而不是使用CI的AR库。一次插入所有内容只会损失事务粒度,因此这取决于您是否担心错误。是的,我知道,但我选择按照操作的思路进行操作……;)不用担心,我通常也会选择这条路线。总是喜欢展示替代方案:)$selected_cats=(isset($post->category)?array_key($post->category):array()。。。。。这句话是什么意思?它是一个字母。如果设置了
$post->category
,则将
数组键($post->category)
分配给
$selected\u cats
,否则为空数组。这是一种速记
if
public function savecontent()
  {         
  $post=$this->input->post();
  $selected_cats=(isset($post->category)?array_keys($post->category):array());
  $data=array(
    'headline'=>$post->headline,
    'category'=>$selected_cats
    );
  $this->co_model->save_content($data);
  }
public function save_content($data)
  {
  $this->db->insert('content',array('content_headline',$data['headline']);
  $content=$this->db->insert_id(); // what we inserted
  foreach($data['category'] as $cat)
    $this->db->insert(
      'content_category',
      array(
        'content'=>$content,
        'category'=>$cat
        )
      );
  }