Codeigniter中的GROUP_CONCAT复选框

时间:2014-07-17 19:21:11

标签: mysql codeigniter

我对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 制作阵列,但我失败了,好吧它没有失败我只是没有知道如何。

1 个答案:

答案 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>