Codeigniter编辑表单下拉菜单数据不显示问题求助
嘿,作为CodeIgniter新手遇到这种没报错但功能卡壳的问题确实闹心!下拉菜单在添加页正常显示、编辑页却空着,大概率是编辑环节漏了和添加页一样的下拉数据加载逻辑,咱们一步步来排查解决:
1. 先检查编辑表单的控制器代码
你在tambah_data()里加载了三个模型并获取了分类、型号、材质的下拉数据,但编辑方法(比如叫edit_data())里有没有做同样的操作?这是最容易漏的点!
举个正确的编辑控制器写法,对比你已有的添加代码:
class Admin extends CI_Controller { // 你已有的添加数据方法 public function tambah_data(){ $this->load->helper('form'); // 加载分类模型并获取数据 $this->load->model('models_kategori_barang', 'mkb'); $datakb = $this->mkb->GetKategoriBarang(); // 加载型号模型并获取数据 $this->load->model('models_model_barang', 'modb'); $datamdb = $this->modb->GetModelBarang(); // 加载材质模型并获取数据 $this->load->model('models_material_barang', 'matb'); $datamatb = $this->matb->GetMaterialBarang(); // 补全你原来的代码 // 把下拉数据传到添加视图 $data['kategori'] = $datakb; $data['model'] = $datamdb; $data['material'] = $datamatb; $this->load->view('tambah_form', $data); } // 你需要补充的编辑数据方法 public function edit_data($id){ // 编辑通常需要传入要修改的数据ID $this->load->helper('form'); // 重点!必须和添加页一样加载三个模型并获取下拉数据 $this->load->model('models_kategori_barang', 'mkb'); $datakb = $this->mkb->GetKategoriBarang(); $this->load->model('models_model_barang', 'modb'); $datamdb = $this->modb->GetModelBarang(); $this->load->model('models_material_barang', 'matb'); $datamatb = $this->matb->GetMaterialBarang(); // 同时获取当前要编辑的主数据(比如从商品表) $this->load->model('models_barang', 'mb'); $data['barang'] = $this->mb->GetBarangById($id); // 关键!下拉数据的变量名要和添加页完全一致,视图才能识别 $data['kategori'] = $datakb; $data['model'] = $datamdb; $data['material'] = $datamatb; $this->load->view('edit_form', $data); } }
这里要注意两个核心点:
- 编辑方法里不能只加载主数据模型,必须重复加载那三个下拉选项的模型并获取数据
- 传到视图的变量名(比如
$data['kategori'])要和添加视图里用的一模一样,不然视图找不到数据
2. 检查编辑视图的下拉菜单代码
确保编辑视图里的下拉菜单和添加视图的循环逻辑一致,只是多了“选中当前数据选项”的判断。比如添加视图的下拉是这样:
<!-- 添加页的分类下拉 --> <select name="kategori_id"> <option value="">-- 选择分类 --</option> <?php foreach($kategori as $row): ?> <option value="<?php echo $row->id ?>"><?php echo $row->nama_kategori ?></option> <?php endforeach; ?> </select>
那编辑页的下拉应该改成这样(保留循环,加上选中判断):
<!-- 编辑页的分类下拉 --> <select name="kategori_id"> <option value="">-- 选择分类 --</option> <?php foreach($kategori as $row): ?> <option value="<?php echo $row->id ?>" <?php echo ($barang->kategori_id == $row->id) ? 'selected' : '' ?>><?php echo $row->nama_kategori ?></option> <?php endforeach; ?> </select>
如果编辑视图里没写这个foreach循环,或者把变量名写错了(比如写成$datakb而不是$kategori),下拉就会显示为空。
3. 排查模型方法是否正常返回数据
如果控制器和视图都没问题,那得确认你的模型方法是不是真的能拿到数据。可以在控制器里加个调试代码:
$datakb = $this->mkb->GetKategoriBarang(); var_dump($datakb); // 看看有没有输出数组或对象数据 die();
如果这里输出是空,那就是模型里的SQL查询写错了;如果有数据,那就是控制器没传到视图,或者视图没正确调用变量。
4. 验证视图是否接收到数据
也可以在编辑视图的顶部加个调试代码,看看有没有拿到下拉数据:
<?php var_dump($kategori); ?> <!-- 查看是否有数据传入 -->
如果输出是NULL,说明控制器没把这个变量传过来;如果有数据,那就是下拉菜单的循环代码写错了。
按照这个顺序排查,应该很快就能找到问题啦!
内容的提问来源于stack exchange,提问作者syifazzahrah
相关产品推荐
相关产品推荐

