2017-10-14 4 views
1

Ich habe einen Code geschrieben, um eine Suche im CODEIGNITER3-Framework durchzuführen. Wenn ich 2 oder mehr Wörter in die Eingabe einfüge, funktioniert das sehr gut. Wenn ich jedoch nur 1 Wort eingib, gibt es diesen Fehler.Die Codeignitersuchfunktion löst einen Fehler aus

enter image description here

Wie kann ich dieses Problem lösen? Hier ist mein Controller:

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

Und hier ist mein Modell:

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

Vielen Dank im Voraus!

+0

Wie Sie sicher wissen, dass die '$ keyword' Array zwei Werte enthält? –

+0

@MehdiBounya das Problem ist, ich möchte es überprüfen, aber weiß nicht, wie –

+0

Warum stören Sie überhaupt mit der Überprüfung, wie viele Werte das Array enthält? Warum durchläuft man nicht einfach das Array $ keyword und verwendet die Methode or_like in der Schleife? –

Antwort

1

Der Fehler bedeutet, dass Sie versuchen, auf einen nicht vorhandenen Schlüssel zuzugreifen 1, Ihr Code ist auf der Modellebene falsch, Ihr Code erhält nur zwei Schlüsselwörter, was ist, wenn der Benutzer nach drei Schlüsselwörtern suchte? wirst du sie einfach ignorieren?

Ich schlage vor, es so zu tun:

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