CodeIgniter项目重定向时如何传递搜索参数至搜索框?
解决CodeIgniter仓库管理系统重定向后保留搜索参数的问题
我明白你现在的核心需求:用户搜索商品并更新库存后,重定向页面不仅要自动把之前的搜索词(type和color)填充到搜索框,还要直接展示符合搜索条件的商品列表,而不是默认的全部商品。下面是一步到位的最优实现方案:
1. 修改重定向逻辑,传递搜索参数
在prevazia函数的edit分支里,把原有的重定向URL改成携带type和color参数的形式,用urlencode处理特殊字符避免URL编码异常:
// 替换原来的redirect代码 $redirect_url = base_url() . 'index.php?admin/prevazia' . '&type=' . urlencode($data['type']) . '&color=' . urlencode($data['color']); redirect($redirect_url, 'refresh');
2. 页面加载时获取参数并过滤商品列表
在函数末尾加载页面数据的部分,先从GET请求中抓取type和color参数,一方面传给视图用于填充搜索框,另一方面用这些参数过滤商品查询,确保重定向后直接显示匹配结果:
// 替换原来的$page_data['prevazia']查询代码 $where = array('active' => $GLOBALS['flag']); // 从GET请求中获取搜索参数 $search_type = $this->input->get('type'); $search_color = $this->input->get('color'); // 如果存在搜索参数,添加到查询条件中 if (!empty($search_type)) { $where['type'] = $search_type; } if (!empty($search_color)) { $where['color'] = $search_color; } // 把搜索参数传递给视图,用于填充搜索框 $page_data['search_type'] = $search_type; $page_data['search_color'] = $search_color; // 获取过滤后的商品列表 $page_data['prevazia'] = $this->db->get_where('prevazia', $where)->result_array(); $this->load->view('backend/index', $page_data);
3. 在前端视图中自动填充搜索框
打开你的prevazia视图文件(对应backend/prevazia.php或你设置的视图路径),找到type和color的搜索输入框,将它们的value属性绑定到我们传递的参数,同时用htmlspecialchars防止XSS攻击:
<!-- 商品类型搜索框 --> <input type="text" name="type" placeholder="搜索商品类型" value="<?php echo isset($search_type) ? htmlspecialchars($search_type) : ''; ?>"> <!-- 商品颜色搜索框 --> <input type="text" name="color" placeholder="搜索商品颜色" value="<?php echo isset($search_color) ? htmlspecialchars($search_color) : ''; ?>">
额外小优化建议
你的代码里混合使用了CodeIgniter数据库类和原生mysqli操作(比如prevazia_log的查询),建议统一用框架的DB类,既符合规范又能利用框架的安全特性:
// 替换原来的mysqli查询last_id的代码 $last_log = $this->db->order_by('id', 'desc')->limit(1)->get('prevazia_log')->row(); $last_id = $last_log ? $last_log->id + 1 : 1;
这样能省去手动设置字符集的步骤,CodeIgniter会自动处理这些细节。
内容的提问来源于stack exchange,提问作者esseker lavezzi
相关产品推荐
相关产品推荐

