试图获得非对象的属性? PHP/代码点火器

Posted

技术标签:

【中文标题】试图获得非对象的属性? PHP/代码点火器【英文标题】:Trying to get property of non-object? PHP/Codeigniter 【发布时间】:2011-10-14 09:46:12 【问题描述】:

我一直在用这个来拔掉我的头发,它开始推迟我的项目的其余部分,这真的让我很沮丧。

我正在尝试使用从数据库表中获取的值填充下拉列表,以便将来如果用户想要向下拉列表添加更多选项,他们可以将它们添加到数据库中的表中。

我正在使用采用 MVC 设计模式的 Codeigniter 平台 (PHP)。

这是我收到的错误消息:

遇到 php 错误严重性:通知消息:尝试获取非对象文件名的属性:views/submit.php 行号:139

我的模型函数在这里,它从名为“Staff”的表中检索行。 这很好用!

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>

变量$formdataprintr()表明它包含这些值:

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

【问题讨论】:

您是否使用包含/要求以及会话来存储对象?我相信,如果您在会话中存储一个对象,那么您必须在开始会话之前包含/要求包含该对象的类定义的文件。 【参考方案1】:

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>

【讨论】:

谢谢谢谢谢谢!我会更加小心我的回归结果【参考方案2】:

您使用了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-&gt;result_array() 更改为$query-&gt;result()

【讨论】:

以上是关于试图获得非对象的属性? PHP/代码点火器的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 - 试图获得非对象的属性

试图获得非对象 Laravel 的属性“浴室”

试图返回属性给出:PHP试图获取非对象的属性

错误:试图在 Laravel 中获取属性 ID 错误(非对象)

Laravel 5.6 - “试图获取非对象的属性”

代码点火器:在非对象上调用成员函数 num_rows()