[英]How to insert multiple checkbox value in mysql using codeigniter
我是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 savecontent()
{
$data=array();
foreach($this->input->post('category_name') as $category_name)
{
$data[] = array('category_name' => $category_name);
}
$data['content_headline']=$this->input->post('content_headline',true);
$this->co_model->save_content($data);
}
模型:
public function save_content($data)
{
$this->db->insert('content',$data);
}
数据库结构:
id(auto incr.), category_name(varchar 50), content_headline(varchar 100)
现在我该如何更改以使用复选框插入多行? 这里还有另一个文本框/列,也插入数据库中。 但只有类别名称(复选框值)才应更改为所有值。
首先,您需要调整数据库结构。 显然, content
和category
之间存在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; ?>
发布后,这将为您提供如下数组:
array(
'headline'=>'War and Peace',
'category'=>array(
45=>'on',
6=>'on'
)
);
...其中45和6是选中的类别ID。 请注意,如果未选择类别,则不会定义category
数组。
因此,控制器变为:
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
)
);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.