CodeIgniter学生系统搜索异常:输入学号返回全部数据求助
解决搜索学号返回全部数据的问题
嘿,我来帮你搞定这个问题!你遇到的搜索指定学号却返回全部学生数据的情况,主要是两个小错误导致的,咱们一个个修正:
1. 搜索表单输入字段的名称配置错误
先看你View里的搜索表单代码:
echo form_input(array('roll_no'=>'search'));
这里你搞错了CodeIgniter form_input函数的参数规则——这个关联数组的键应该是HTML属性名(比如name、id),而不是把字段名roll_no当键。你现在的写法会生成一个带有roll_no="search"属性的输入框,但没有设置正确的name属性,这就导致控制器里$this->input->post('search')根本拿不到用户输入的学号,最终传给Model的$search_term是空值。
修正代码:
把表单输入改成正确的格式,明确设置name属性为search:
echo form_input(array('name' => 'search', 'placeholder' => '请输入学号'));
2. 模糊匹配不符合你的需求(精确匹配学号)
你的Model里用了$this->db->like('roll_no',$search_term),这是模糊匹配逻辑——比如输入1会匹配所有包含1的学号(比如1、10、11等)。但你想要的是精准匹配指定学号,所以应该用where替代like:
修正Model的get_results方法:
public function get_results($search_term='') { // 仅当有搜索关键词时添加匹配条件 if (!empty($search_term)) { $this->db->where('roll_no', $search_term); } $query = $this->db->get('stud'); return $query->result_array(); }
这样当用户输入学号时,只会返回对应学号的记录;如果没输入,就返回全部数据(你也可以根据需求改成没输入时返回空结果)。
额外的安全优化建议
你的Model里的delete方法直接拼接学号到SQL语句中,存在SQL注入风险,建议改成Active Record的安全绑定方式:
public function delete($roll_no) { return $this->db->delete("stud", array("roll_no" => $roll_no)); }
CodeIgniter会自动帮你处理数据转义,避免安全问题。
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

