如何从数据库取数并在HTML下拉框展示?CodeIgniter代码问题排查
解决CodeIgniter动态下拉框无内容的问题
我帮你排查了代码里的几个关键问题,这些应该就是下拉框没显示内容的原因,咱们一步步来修正:
1. 控制器传递数据的方式错误
CodeIgniter中给视图传数据需要把变量放到关联数组里,你直接传递$getcity的话,视图无法正确识别$getcity这个变量名。
修正后的控制器代码:
public function city() { $this->load->model('dropdownM'); $data['getcity'] = $this->dropdownM->get_city(); // 将结果存入关联数组 $this->load->view('form1city', $data); // 传递整个数组到视图 }
2. 模型查询的字段不匹配
你的模型里只查询了fname字段,但视图里需要用到c_id和C_name,这会导致返回的结果里没有这两个字段,自然无法渲染选项。另外,建议查询无结果时返回空数组,避免视图里的count判断出错。
修正后的模型代码:
<?php class DropdownM extends CI_Model { public function get_city() { $this->db->select('c_id, C_name'); // 选择视图需要的字段 $this->db->from('city'); $query = $this->db->get(); if($query->num_rows()>0) { return $query->result(); } return []; // 无结果时返回空数组 } }
3. 视图里的变量错误与语法问题
- 循环里误用了
$village1变量,应该用循环定义的$city - 表单闭合标签写错成了
<form>,应该是</form> - 可以加上
isset($getcity)判断,避免变量未定义报错
修正后的视图代码:
<form action="<?php echo base_url(); ?>index.php/Rec/user" method="post"> <select class="form-control" id="city" name="city"> <option value="">Select </option> <?php if(isset($getcity) && count($getcity)):?> <?php foreach($getcity as $city):?> <option value="<?php echo $city->c_id;?>"><?php echo $city->C_name;?></option> <?php endforeach;?> <?php else:?> <option value="">No cities available</option> <?php endif;?> </select> <center> <input type="submit" value="Submit" class="btn btn-bricky" id="subbtn" name="submit1"> </center> </form> <!-- 修正表单闭合标签 -->
做完这些修改后,下拉框应该就能正常显示城市选项了。如果还是有问题,可以检查数据库里city表是否有数据,以及字段名是否和代码里的完全一致(注意大小写敏感)。
内容的提问来源于stack exchange,提问作者Nisha
相关产品推荐
相关产品推荐

