2017-10-14 4 views
1

CODEIGNITER3フレームワークで検索するためのコードを記述しました。 2つ以上の単語を検索入力に挿入するとうまくいきますが、1単語だけ入力するとこのエラーが発生します。Codeigniter検索関数がエラーをスローする

enter image description here

どのように私はこの問題を解決することができますか?ここ は私のコントローラです:

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(); 
     } 

ありがとう!

+0

をあなたは '$ keyword'配列は二つの値が含まれていることを確実に知る方法は? –

+0

@MehdiBounya問題は、私はそれをチェックしたいが、どのようにわからないのですか –

+0

なぜ配列に含まれる値の数を確認することに迷惑をかけることがありますか?なぜあなたは '$ keyword'配列をループし、ループの中で' or_like'メソッドを使うのですか? –

答えて

1

エラーは、登録されていないキー1にアクセスしようとしていること、モデルレベルでコードが間違っていること、コードで2つのキーワードしか取得できないこと、ユーザーが3つのキーワードを検索した場合どうなりますか?あなたはそれらを無視するつもりですか?

私はこのようにそれをやってお勧め:

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(); 
} 
関連する問題