我对codeigniter很新,现在我正在学习复选框值。我成功保存到我的数据库,我的问题是如何从我的表中插入值。
table1 (fc_artikel)
idartikel | judul_artikel | deskripsi | isiartikel
18 Title Desc Content
table2 (fc_kategori)
idkategory| namakategory
1 PHP
2 HTML
table3 (fc_artikelkategori)
ID | idartikel | idkategory
1 18 1
2 18 2
我的控制器将文章显示在我的编辑表单中。
function editartikel($id)
{
$sql =
"select a.idartikel,a.deskripsi,a.judul_artikel,a.isiartikel,b.namakategori,
GROUP_CONCAT(b.idkategori)idkategori
from fc_artikel a left join fc_artikelkategori c on a.idartikel=c.idartikel
left join fc_kategori b on b.idkategori=c.idkategori
where a.flag='1' and c.idartikel='$id' group_by b.idkategori";
$sql1 = "select * from fc_kategori where flag='1'";
$this->data['artikel'] = $this->bymodel->tampildata($sql);
$this->data['kategori'] = $this->bymodel->tampildata($sql1);
$this->data['include']= 'admin/editartikel';
$this->load->view('admin/page',$this->data);
}
这是我的模特
function tampildata ($sql)
{
$query = $this->db->query($sql);
return $query->result();
}
到目前为止,我已经这样做了我的观点,并且我坚持要从数据库中插入值。
<?php
foreach($artikel as $baris)
{
?>
<form method='POST' action='<?=base_url();?>admin/updateartikel/<?php echo $baris->idartikel ;?>'>
<fieldset><label>JUDUL</label><input type='text' value='<?php echo $baris->judul_artikel;?>' name='judul'></fieldset>
<textarea name="content" id="content" ><?php echo $baris->isiartikel;?></textarea>
<?php echo display_ckeditor($ckeditor); ?>
<fieldset>
<p>
*<?php
$output[] =$baris->idkategori;
echo implode(', ', $output);
}
?>
<label>Kategori</label>
<?php foreach ($kategori as $pilihan){?>
<p>
MY CHECKBOX (VALUES FROM database)
</p>
<?php }; ?>
</p>
我尝试从我的 $ baris-&gt; idkategori 制作阵列,但我失败了,好吧它没有失败我只是没有知道如何。
答案 0 :(得分:0)
首先使用GROUP_CONCAT
不是最佳解决方案,因为它的默认限制为1024个字符,可以从您的问题中得出结论我猜您需要显示所有类别,默认情况下选择以前分配给您的类别在此文章中,您可以选择单独数组中的所有选定类别以及在
/* Controller */
function editartikel($id){
$this->data['artikel'] = $this->bymodel->getArticle($id);
$this->data['kategori'] = $this->bymodel->getCategories();
$this->data['selected_kategori'] = $this->bymodel->getSelectedCategories($id);
$this->data['include']= 'admin/editartikel';
$this->load->view('admin/page',$this->data);
}
同时在模型中移动查询并使用活动记录
/* Model */
function getArticle($id){
return $this->db->select('*')
->from('fc_artikel')
->where('flag',1)
->where('idartikel',$id)
->get()
->result();
}
function getCategories(){
return $this->db->select('*')
->from('fc_kategori')
->where('flag',1)
->get()
->result();
}
function getSelectedCategories(){
return $this->db->select('c.*')
->from('fc_kategori c')
->join('fc_artikelkategori ac','c.idkategori=ac.idkategori')
->where('c.flag',1)
->get()
->result();
}
在视图部分,没有任何意义可以循环只有记录如果你逐条得到文章,那么这意味着你只选择一篇文章,所以不需要循环并显示你的文章细节我会告诉你所选的类别部分
<?php
$selectedids=array();
foreach ($selected_kategori as $s){
$selectedids[] = $s->idkategory;
}
foreach ($kategori as $c){
if(in_array($c->idkategory,$selectedids)){
$selected ='checked="checked"';
}else{
$selected ='';
}?>
<p>
<?php echo $c->namakategory; ?>
</p>
<input type="checkbox" name="categoires[]" <?php echo $selected; ?> value="<?php echo $c->idkategory;?>" />
<?php } ?>
如果您仍想使用group_concat
与之前的解决方案一起使用,那么在视图中您可以这样做
<p>
<?php
$selectedCats= implode(',',$baris->idkategori);
foreach ($kategori as $c){
if(in_array($c->idkategory,$selectedCats)){
$selected ='checked="checked"';
}else{
$selected ='';
}?>
<p>
<?php echo $c->namakategory; ?>
</p>
<input type="checkbox" name="categoires[]" <?php echo $selected; ?> value="<?php echo $c->idkategory;?>" />
<?php } ?>
</p>