Пытаетесь получить свойство необъекта?PHP / Codeigniter - PullRequest
6 голосов
/ 27 июля 2011

Я буквально тянул свои волосы с этим, и это начало задерживать остальную часть моего проекта, и это действительно меня расстраивает.

Я пытаюсь заполнить раскрывающийся список, используя значения, взятые изтаблицу базы данных, так что если в будущем пользователь захочет добавить дополнительные параметры в раскрывающийся список, он может добавить их в таблицу в базе данных.

Я использую платформу Codeigniter (PHP), используяШаблон проектирования MVC.

Вот сообщение об ошибке, которое я получаю:

Обнаружена ошибка PHP. Уровень серьезности: Уведомление Сообщение: Попытка получить свойство не-объекта Имя файла: views / submit.php Номер строки: 139

Здесь используется функция «Моя модель», которая извлекает строки из таблицы, называемой «Персонал».Это отлично работает!

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

Это функция контроллера, которая получает параметр и передает его на мой взгляд.Это работает отлично!

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

Это та часть представления, которая вызывает проблему: я использую foreach, а затем выводю экземпляры массива в опцию.

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

printr() переменной $formdata показывает, что она содержит следующие значения:

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
    )
)

Ответы [ 2 ]

15 голосов
/ 27 июля 2011

formdata - это массив массивов, а не объектов, поэтому просто измените ваш взгляд:

<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>
3 голосов
/ 27 июля 2011

Вы использовали result_array, что означает, что вы получите массив массивов вместо массива объектов. Вы можете либо изменить свой вид, чтобы иметь это:

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

вместо

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

или вы можете изменить $query->result_array() на $query->result() в модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...