Php 如何使用codeigniter在mysql中插入多个复选框值
我是codeigniter的新手。我试图插入多个新闻,其中包含一些复选框,其值从数据库循环。但我不知道应该在控制器和模型中为此编写什么代码来插入值。有人能建议或帮助我写代码吗 查看-content.php: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-&
//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
)
);
}