You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter MVC框架下基于下拉选项实现表格数据实时筛选咨询

实现方案

步骤1:修改视图页面标签结构

首先给下拉框和表格主体加上可识别的属性,方便后续JS操作,同时把表格行的循环逻辑抽成独立公共片段,避免重复代码:

<table>
  <tr>
    <th width="10%">Source</th>
    <!-- 新增其他列的th同理 -->
  </tr>
  <tr>
    <td width="5%">
      <!-- 给下拉框加统一类名filter-select,name属性对应数据库筛选字段 -->
      <select class="filter-select" name="source">
        <option value="">All </option>
        <?php if($sources) foreach($sources as $source): ?>
        <option value="<?php echo $source['title'] ?>"><?php echo $source['title'] ?></option>
        <?php endforeach;?>
      </select>
    </td>
    <!-- 新增其他列的下拉框同理,只要加filter-select类、name设为对应字段即可 -->
  </tr>
  <tbody id="table-body">
    <!-- 把表格行循环逻辑抽成独立视图文件table_rows.php,首次加载和AJAX刷新共用 -->
    <?php $this->load->view('table_rows', ['records' => $records]) ?>
  </tbody>
</table>

新建application/views/table_rows.php文件,内容如下:

<?php
if(isset($records) && count($records) > 0) {
  foreach($records as $row ){                            
?>
<tr>            
  <td><?= $row->source ?></td>
  <!-- 其他列的td同理 -->
</tr>
<?php } } ?>

步骤2:新增JS实现实时筛选

在页面底部引入jQuery(项目已有可跳过引入步骤),监听下拉框的选择事件,自动收集所有筛选条件发起AJAX请求:

<script src="你的本地jQuery文件路径"></script>
<script>
$(function(){
  // 监听所有筛选下拉框的选择事件
  $('.filter-select').change(function(){
    // 收集所有下拉框的选中值作为筛选参数
    let filterParams = {};
    $('.filter-select').each(function(){
      let field = $(this).attr('name');
      let value = $(this).val();
      filterParams[field] = value;
    });
    // 拼接CodeIgniter CSRF令牌(开启CSRF防护时必须传,否则请求会被拦截)
    // CI3版本用下面这行
    filterParams['<?= $this->security->get_csrf_token_name() ?>'] = '<?= $this->security->get_csrf_hash() ?>';
    // CI4版本替换为下面这行
    // filterParams['<?= csrf_token() ?>'] = '<?= csrf_hash() ?>';

    // 发起AJAX请求到后端接口
    $.post('<?= site_url("你的控制器名/get_filtered_records") ?>', filterParams, function(res){
      // 用返回的新表格内容替换原有内容
      $('#table-body').html(res);
    });
  });
});
</script>

步骤3:后端新增筛选接口

在你的控制器中新增处理筛选请求的方法:

// CI3示例
public function get_filtered_records()
{
  // 接收所有前端传的筛选参数
  $filters = $this->input->post();
  // 移除CSRF参数,避免干扰查询条件
  unset($filters[$this->security->get_csrf_token_name()]);
  // 调用模型查询筛选后的记录
  $data['records'] = $this->你的模型名->get_filtered_records($filters);
  // 直接返回表格行的HTML片段
  $this->load->view('table_rows', $data);
}

// CI4示例
// public function get_filtered_records()
// {
//   $filters = $this->request->getPost();
//   unset($filters[csrf_token()]);
//   $data['records'] = $this->你的模型名->get_filtered_records($filters);
//   return view('table_rows', $data);
// }

步骤4:模型新增筛选查询方法

在对应的模型中新增多条件拼接查询逻辑:

public function get_filtered_records($filters = [])
{
  $this->db->from('你的业务表名');
  // 自动遍历所有非空筛选条件,拼接WHERE查询,多条件默认是AND关系,天然支持联合筛选
  foreach($filters as $field => $value){
    if($value !== ''){
      $this->db->where($field, $value);
    }
  }
  return $this->db->get()->result();
}

多下拉框适配说明

后续新增其他列的筛选下拉框时,只需要给对应下拉框加上filter-select类、name属性设为对应的数据库字段名即可,不需要修改JS、控制器、模型的逻辑,自动支持多条件联合筛选。

内容的提问来源于stack exchange,提问作者H2O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:18:00