2012-08-27 2 views
0

Je constate que la variable de résultat n'est pas définie dans mon contrôleur Ajaxcont. Je ne suis pas sûr de savoir exactement comment transférer les résultats $ du modèle dans le contrôleur. Je veux juste que mon tableau $ results contienne toute la valeur récupérée par la requête. Qu'est-ce que je fais mal?Comment passer des variables d'un modèle à l'autre


<?php 
    if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Ajaxcont extends CI_Controller 
{ 
    function __construct() 
    { 
     parent::__construct(); 
     $this->load->model("ajax_model"); 
    } 

    function index() 
    { 
     $search = $this->input->post('search', TRUE); 
     $like_search= '%' .$this->db->escape_like_str($search) . '%'; 
     $query= $this->ajax_model->search_course($like_search); 

     if ($query) 
     { 
      foreach($query->result() as $row) 
      { 

       //$course_name_highlighted = str_ireplace($search, '<b>' .$search . '</b>' , $row->full_name); 

       $start = stripos($row-> Course_Name, $search); 
       $length= strlen($search); 
       $new_search = substr($row->Course_Name, $start, $length); 
       $course_name_highlighted = str_ireplace($new_search, '<b>' .$new_search . '</b>' , $row->Course_Name); 
       $results[]= array(
        'Course_Name' => $row->Course_Name, 
        'FirstName' => $row->FirstName, 
        'LastName' => $row->LastName, 
        'COURSE_ID' => $row->COURSE_ID, 
        'course_name_highlighted' => $course_name_highlighted 
        ); 
      } 
     } 

     if ($this->input-> is_ajax_request()) 
     { 
      $this->output->set_header("Cache-Control: no-cache, must-revalidate"); 
      $this->output->set_header("Expires:Mon, 4 Apr 1994 04:44:44 GMT"); 
      $this->output->set_header("Content-type:application/json"); 

      echo json_encode($results); 
     } 
     else 
     { 
      $data['results'] = $results; 
      $this->load->view('ajax_search', $data); 
     } 
    } 
} 

Et le code Axaj_model:

<?php 

Class Ajax_model extends CI_Model 
{ 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function search_course($like_search) 
    { 
     $this->db->select('FirstName, LastName, COURSE_ID, Course_Name, Semester,Time,Book, SECTION_ID'); 
     $this->db->from('Section'); 
     $this->db->join('faculty', 'faculty.FACULTY_ID = section.FACULTY_ID'); 
     $this->db->like('Course_Name', $like_search); 
     $this->db->order_by('Course_Name'); 
     $query = $this -> db->get(); 

     //If it is all correct 
     $results=array(); 

     if($query -> num_rows() > 0) 
     { 
      return $query->result(); 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 
+0

Votre tableau de résultats doit être déclarée en dehors du « si » le bloc, maintenant il est indéfini au point où vous l'écho il – Asciiom

+0

Est-ce vous obtenez ceci quand il n'y a aucun résultat de requête? –

+0

Pourriez-vous partager avec nous où dans votre code vous obtenez l'avis "variable n'est pas défini"? –

Répondre

1

Le modèle renvoie un tableau multidimensionnel. Vous devez donc utiliser l'instance pour récupérer les données.

MODÈLE

$results=array(); // you don't even have to declare it 

if($query -> num_rows() > 0) 
{ 

$result= $query->result(); 
return $result; 

} 

else 
{ 
    return false; 
} 

Contrôleur

function index() 

{ 

    $search = $this->input->post('search', TRUE); 
    $like_search= '%' .$this->db->escape_like_str($search) . '%'; 
    $query['result']= $this->ajax_model->search_course($like_search); 

if ($query) 
{ 
    foreach($query['result'] as $row) 
    { 
    //stuff here 
    } 
} 
+0

édité une petite erreur .. vérifier le code maintenant et signaler la sortie –

+0

maintenant je reçois Message: Argument invalide fourni pour foreach() – Undermine2k

+0

essayez 'foreach ($ result as $ row)' –

1

Votre tableau de résultats doit être déclarée en dehors du « si » le bloc, maintenant il est pas défini au point où vous l'écho il. Ajoutez ceci:

$results = array(); 

au début de votre fonction 'index'.

Vous devriez lire sur la partie supérieure de la fonction d'index sur variable scope

+0

oui, vous avez raison, j'ai omis cette ligne, mais qu'il ne renvoie toujours aucune donnée. Je pense que je ne récupère pas correctement les données de mon modèle. Comment puis-je déboguer et voir ce que je suis en train de faire? – Undermine2k

+0

@ Undermine2k Pas besoin de déclarer cela. Comme il s'agit d'un tableau multi-dimensionnel, vous devez utiliser l'instance –

0

vous devez déclarer le résultat.

function index(){ 
    $result = array(); 
} 
Questions connexes