【问题标题】:Codeigniter search function throws an errorCodeigniter 搜索功能抛出错误
【发布时间】:2017-10-14 21:06:04
【问题描述】:

我已经编写了一些代码来在 CODEIGNITER3 框架中进行搜索。当我插入 2 个或更多单词来搜索输入时,效果很好,但是,当我只输入 1 个单词时,它会出现此错误。

我该如何解决这个问题? 这是我的控制器:

function search() {
            $keyword = strip_tags($this->input->get('searchforcourses'));
            $keyword = explode(" ", $keyword);

            $data['title'] = 'Bütün Kurslar Burada';
            $data['courses'] = $this->courses_model->courses_search($keyword);


            $this->load->view('templates/header');
            $this->load->view('courses/courses', $data);
            $this->load->view('templates/footer');
        }

这是我的模型:

function courses_search($keyword) {
            $this->db->select('*');
            $this->db->from('courses');
            $this->db->like('title',$keyword[0]);
            $this->db->or_like('title',$keyword[1]);
            $this->db->join('instructors', 'instructors.id = courses.instructor_id', 'left');
            $this->db->join('categories', 'categories.id = courses.category_id', 'left');
            $query = $this->db->get();
            return $query->result_array();
        }

提前致谢!

【问题讨论】:

  • 你怎么确定$keyword数组包含两个值?
  • @MehdiBounya 问题是,我想查,但不知道怎么做
  • 你为什么还要检查数组包含多少值?为什么不直接遍历$keyword 数组并在循环中使用or_like 方法?
  • 因为我是新人,我没有明白你的想法:(你能简单解释一下吗?

标签: php codeigniter search


【解决方案1】:

这个错误意味着你试图访问一个不存在的键1,你的代码在模型层面是错误的,你的代码只得到了两个关键字,如果用户搜索了三个关键字怎么办?你会忽略它们吗?

我建议这样做:

function courses_search($keyword) {
    $this->db->select('*');
    $this->db->from('courses');
    // You should consider limiting the number of keywords to avoid long loops
    // Limits to 20 keywords
    $keyword = array_slice($keyword, 0, 19);
    // You can also limit it in the 3rd parameter of the explode function
    // Loop through the keywords
    forearch($keyword as $key){
        $this->db->or_like('title',$key);
    }
    $this->db->join('instructors', 'instructors.id = courses.instructor_id', 'left');
    $this->db->join('categories', 'categories.id = courses.category_id', 'left');
    $query = $this->db->get();
    return $query->result_array();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2022-01-02
    相关资源
    最近更新 更多