Codeigniter - 依赖选择框与数据库

时间:2015-11-02 14:34:10

标签: php jquery sql ajax codeigniter

我只想再询问一下codeigniter。

我想在codeigniter中使用sql server数据库创建依赖选择表单。

我有一个数据库表名MS_UPB(它包含一个位置)和MS_RUANG(它包含该位置的一个房间)。 我的任务是显示MS_RUANG.kd_lokasi(这是房间位置ID)= MS_UP.kd_lokasi的房间(这是位置ID),并在相关选择框中显示codeigniter

我的观点:

<?php
echo form_open('admin/laporan/tampildbr',$att)
?>
        <div class="control-group">
            <label class="control-label" for="inputEmail">Unit Kerja</label>
            <div class="controls">
                <select name="unit" id="unit">
                <?php
                foreach ($isdata as $row) {
                    echo "<option value='".$row->KDUPB."|".$row->NAMAUPB."'>".$row->NAMAUPB."</option>";
                }
                ?>
                </select>
            </div>
        </div>

        <div class="control-group">
            <label class="control-label" for="inputEmail">Ruangan</label>
            <div class="controls">
                <select name="ruangan" id="ruangan" id="ruangan_label">
                    <option value=""></option>
                </select>
            </div>
        </div>

        <div class="control-group">
            <label class="control-label" for="inputEmail">Jenis</label>
            <div class="controls">
                <input type="radio" name="jenis" value="DAFTAR BARANG RUANGAN" />Daftar Barang ruangan
            </div>
            <div class="controls">
                <input type="radio" name="jenis" value="REKAP DBR" />Rekap DBR
            </div>
        </div>

            <div class="control-group">
            <div class="controls">   
            <button type="submit" class="btn btn-success" name="submit" formtarget="_blank">Kirim</button>
            </div>
            </div>
            </form>
           <p>&nbsp;</p>
           <p>&nbsp;</p>

<?php form_close();?>

<script type="text/javascript">
$('#ruangan,#ruangan_label').hide();
$('#unit').change(function(){
    var unit_id = $('#unit').val();
    if (unit_id != ""){
        var post_url = "admin/laporan/getruangan" + unit_id;
        $.ajax({
            type: "POST",
             url: post_url,
             success: function(ruangan) //what's this ruangan mean?
              {
                $('#ruangan').empty();
                $('#ruangan, #ruangan_label').show();
                   $.each(ruangan,function(kd_ruang,ruang) 
                   {
                    var opt = $('<option />');
                      opt.val(kd_ruang);
                      opt.text(ruang);
                      $('#ruangan').append(opt); 
                    });
               } //end success
         }); //end AJAX
    } else {
        $('#ruangan').empty();
        $('#ruangan, #ruangan_label').hide();
    }
});
</script>

我的控制器:

function getruangan($unit)
    {
        $unit=explode('|',$unit);
        $unitkerja=$unit[0];
        $this->load->model('admin/laporanmodel','',TRUE);
        header('Content-Type: application/x-json; charset=utf-8');
        echo (json_encode($this->laporanmodel->get_ruangan($unitkerja)));
    }

我的模特:

function get_ruangan($unit)
    {
        $this->db->select('kd_ruang,namaruang');
        $this->db->from('MS_RUANG');
        $this->db->where('kd_lokasi, "'.$unit.'"');
        $query=$this->db->get();
        $ruangan=array();
        if($query->result()){
            foreach ($query->result() as $ruang) {
                $ruangan[$ruang->kd_ruang] = $ruang->kd_ruang;
            }
            return $ruangan;
        } else {
            return FALSE;
        }
    }

请帮助我,谢谢你的帮助:)。

1 个答案:

答案 0 :(得分:0)

我认为您在将值附加到选择框时遇到问题。

我会告诉你在模型中做所有必需的东西。如果您这样做,我们可以 reduce execution time of one for loop

尝试更改您的模型。

在模型中

if($query->result()){
    $option = "<option>Select the value</option>";// this is for default value.
    foreach ($query->result() as $ruang) {
        $ruangan[$ruang->kd_ruang] = $ruang->kd_ruang;
        $option .= "<option value='$ruang->kd_ruang'>{$ruang->kd_ruang}</option>".
    }
    return $option;
} else {
    return FALSE;
}

仅在模型中,我们为视图生成所需的html。

在控制器中

//header('Content-Type: application/x-json; charset=utf-8');// comment this line
echo ($this->laporanmodel->get_ruangan($unitkerja));

我已删除控制器中的json部分。我们将在这里采用纯文本。

在视图中

我正在改变ajax中的整个success()

success: function(ruangan) //what's this ruangan mean?
{
    $('#ruangan').append(ruangan);// just append the value coming from ajax call here.        
}

我们减少了一个循环的执行时间。

希望它有所帮助。