2011-07-27 37 views
6

He estado literalmente tirando de mi pelo con esto y está empezando a retrasar el resto de mi proyecto y realmente me está deprimiendo.tratando de obtener la propiedad de no objetos? PHP/Codeigniter

Estoy intentando rellenar un desplegable utilizando valores tomados de una tabla de base de datos para que, si en el futuro el usuario desea agregar más opciones al desplegable, pueda agregarlos a la tabla en la base de datos.

Estoy utilizando la plataforma Codeigniter (PHP) usando el patrón de diseño MVC.

Aquí está el mensaje de error que estoy recibiendo:

Un PHP Se encontró el error Severidad: Aviso Mensaje: Tratar de obtener la propiedad de Nombre de archivo no-objeto: vistas/Número de línea submit.php: 139

Mi función de modelo es aquí que recupera las filas de la tabla llamada "Personal". ¡Esto funciona bien!

function retrieve_values() 
{ 
    $query = $this->db->get('staff'); 

    if ($query->num_rows() > 0) 
    { 
     //true if there are rows in the table 
     return $query->result_array(); //returns an object of data 
    } 

    return false; 
} 

Esta es la función de controlador que recibe el parámetro y lo pasa a mi opinión. ¡Esto funciona bien!

public function displayform() 
{ 

    //Checks if a user is logged in, if they are not they get redirected - 
    if ($this->session->userdata('name') == FALSE || $this->session->userdata('access_level') == FALSE) 
    { 
     redirect ('site/index');// to home page 
    } 

    //Stores the returned array in instance called "formdata" which will be passed to the view to be used in pulldown menu 
    $page['formdata']=$this->submit_model->retrieve_values(); 

    //This loads the form 
    //Instance of "page" in array "page" specifies the file name of the page to load 
    $page['page'] = 'submit'; 
    $this->load->view('template', $page); 

    return; 
} 

Esta es la parte de la vista, que está causando el problema: estoy usando un foreach y luego haciendo eco a las instancias de la matriz en la opción.

<select> 
    <?php foreach ($formdata as $row) { ?> 
     <option value="<?php echo $row->staff_id; ?>"><?php echo $row->name; ?></option> 
    <?php } ?> 
</select> 

printr() de la variable $formdata muestra que contiene estos valores:

Array (
    [0] => Array (
     [staff_id] => 1 
     [name] => Cardiology Nurse 
    ) 
    [1] => Array (
     [staff_id] => 2 
     [name] => Radiology Nurse 
    ) 
    [2] => Array (
     [staff_id] => 3 
     [name] => Scrub Nurse 
    ) 
    [3] => Array (
     [staff_id] => 4 
     [name] => Circulating Nurse 
    ) 
    [4] => Array (
     [staff_id] => 5 
     [name] => Nurse 
    ) 
    [5] => Array (
     [staff_id] => 6 
     [name] => Training Nurse 
    ) 
    [6] => Array (
     [staff_id] => 7 
     [name] => Physiologist 
    ) 
    [7] => Array (
     [staff_id] => 8 
     [name] => Radiographer 
    ) 
    [8] => Array (
     [staff_id] => 9 
     [name] => Consultant 
    ) 
    [9] => Array (
     [staff_id] => 10 
     [name] => Radiologist 
    ) 
    [10] => Array (
     [staff_id] => 11 
     [name] => Cardiologist 
    ) 
    [11] => Array (
     [staff_id] => 12 
     [name] => Anaethestist 
    ) 
    [12] => Array (
     [staff_id] => 13 
     [name] => Non-medical Staff 
    ) 
) 
+0

¿Está utilizando includes/requiere, junto con sesiones para almacenar objetos? Creo que si almacena un objeto en una sesión, debe incluir/requerir el archivo que contiene la definición de clase del objeto antes de iniciar la sesión. – James

Respuesta

15

FormData es una matriz de matrices, no objetos, por lo que basta con modificar en su opinión:

<option value="<?php echo $row->staff_id; ?>"><?php echo $row->name; ?></option> 
// to 
<option value="<?php echo $row['staff_id']; ?>"><?php echo $row['name']; ?></option> 
+1

GRACIAS GRACIAS ¡GRACIAS! Tendré más cuidado con mis resultados de retun – sqlmole

2

que ha utilizado result_array, lo que significa que va a obtener una matriz de matrices, en lugar de una serie de objetos. Usted puede modificar su punto de vista para tener esto:

<option value="<?php echo $row['staff_id']; ?>"> 
    <?php echo $row['name']; ?> 
</option> 

en lugar de

<option value="<?php echo $row->staff_id; ?>"> 
    <?php echo $row->name; ?> 
</option> 

o puede cambiar a $query->result_array()$query->result() en el modelo.

+0

GRACIAS !!!! TANTO SIR !!!!! FUNCIONA: D – sqlmole

Cuestiones relacionadas