2017-02-27 69 views
-1

錯誤笨模式「試圖獲得非對象的財產」

一個PHP錯誤遇到

嚴重性:注意

消息:試圖讓非對象

財產

文件名:models/task_model.php

行號:43

回溯:

文件:C:\的appserv \ WWW \ CI \程序\型號\ task_model.php 行:43 功能:_error_handler

文件:C:\的appserv \ WWW \ CI \應用\控制器\ tasks.php 行:57 功能:get_project_name

文件:C:\的appserv \ WWW \ CI \的index.php 行:315 功能:require_once

這種模式

<?php 

class Task_model extends CI_Model{ 

    public function get_task($task_id){ 

     $this->db->where('id', $task_id); 

     $query = $this->db->get('tasks'); 

     return $query->row(); 

    } 


    public function create_task($data){ 

     $query = $this->db->insert('tasks', $data); 

     return $query; 

    } 


    public function get_task_project_id($task_id){ 

     $this->db->where('id', $task_id); 

     $query = $this->db->get('tasks'); 

     return $query->row()->project_id; 


    } 


    public function get_project_name($project_id){ 

     $this->db->where('id', $project_id); 

     $query = $this->db->get('projects'); 

     return $query->row()->project_name; 
    } 


    public function get_task_project_data($task_id){ 

     $this->db->where('id', $task_id); 

     $query = $this->db->get('tasks'); 

     return $query->row(); 


    } 


    public function edit_task($task_id, $data){ 

     $this->db->where('id', $task_id); 

     $this->db->update('tasks', $data); 

     return true; 


    } 



} 

?> 

該控制器

<?php 
 

 
class Tasks extends CI_Controller{ 
 
\t 
 
\t public function display($task_id){ 
 

 
\t \t $data['task'] = $this->task_model->get_task($task_id); 
 

 
\t \t $data['main_view'] = "tasks/display"; 
 
\t \t $this->load->view('layouts/main', $data); 
 

 
\t } 
 

 

 
\t public function create($project_id){ 
 

 
\t \t $this->form_validation->set_rules('task_name', 'Task Name', 'trim|required'); 
 
\t \t $this->form_validation->set_rules('task_body', 'Task Description', 'trim|required'); 
 

 

 
\t \t if ($this->form_validation->run() == FALSE) { 
 
\t \t \t 
 
\t \t \t $data['main_view'] = 'tasks/create_task'; 
 
\t \t \t $this->load->view('layouts/main', $data); 
 

 
\t \t }else{ 
 

 

 
\t \t \t $data = array(
 

 
\t \t \t \t 'project_id' => $project_id, 
 
\t \t \t \t 'task_name' => $this->input->post('task_name'), 
 
\t \t \t \t 'task_body' => $this->input->post('task_body'), 
 
\t \t \t \t 'due_date' => $this->input->post('due_date') 
 
\t \t \t); 
 

 
\t \t \t if ($this->task_model->create_task($data)) { 
 
\t \t \t \t 
 
\t \t \t \t $this->session->set_flashdata('task_created', 'Your task Has Been Created'); 
 
\t \t \t \t redirect('tasks/index'); 
 

 
\t \t \t } 
 

 
\t \t } 
 

 
\t } 
 

 
\t public function edit($task_id){ 
 

 
\t $this->form_validation->set_rules('task_name', 'Task Name', 'trim|required'); 
 
\t $this->form_validation->set_rules('task_body', 'Task Description', 'trim|required'); 
 

 

 
\t if ($this->form_validation->run() == FALSE) { 
 

 
\t \t $data['project_id'] \t \t = $this->task_model->get_task_project_id($task_id); 
 
\t \t $data['project_name'] \t = $this->task_model->get_project_name($data['project_id']); 
 
\t \t $data['the_task'] \t \t = $this->task_model->get_task_project_data($task_id); 
 
\t \t 
 
\t \t $data['main_view'] = 'tasks/edit_task'; 
 
\t \t $this->load->view('layouts/main', $data); 
 

 
\t }else{ 
 

 
\t \t $project_id = $this->task_model->get_task_project_id($task_id); 
 

 

 
\t \t $data = array(
 

 
\t \t \t 'project_id' => $project_id, 
 
\t \t \t 'task_name' => $this->input->post('task_name'), 
 
\t \t \t 'task_body' \t => $this->input->post('task_body'), 
 
\t \t \t 'due_date' \t => $this->input->post('due_date') 
 
\t \t); 
 

 
\t \t if ($this->task_model->edit_task($task_id, $data)) { 
 
\t \t \t 
 
\t \t \t $this->session->set_flashdata('task_updated', 'Your task Has Been Created'); 
 
\t \t \t redirect('projects/index'); 
 

 
\t \t } 
 

 
\t } 
 

 
} 
 

 
} 
 

 

 
?>

我無法找到問題:(

+1

只是一個提示,如果使用笨3> veirsions文件名和類名應該有第一個字母大寫文件名:型號/ task_model.php更改文件名:型號/ Task_model.php同樣適用與控制器 – user4419336

回答

-1

這個問題Trying to get property of non-object - CodeIgniter的可能重複

您在43行上查詢結果的方式不正確。在需要使用數組表示法的情況下使用對象表示法。

嘗試類似:

return $query['0']->project_name; 
+0

row()方法返回單個結果行。如果你的查詢有多行,它只返回第一行。結果作爲對象返回。不需要在這裏添加對象符號。由於這個原因沒有設置數據顯示錯誤。請參閱鏈接https://www.codeigniter.com/user_guide/database/results.html –

1

你需要檢查行有數據或不。請用此方法替換此方法。

public function get_project_name($project_id){ 
 

 
     $this->db->where('id', $project_id); 
 

 
     $query = $this->db->get('projects'); 
 

 
     $row= $query->row(); 
 
     if(isset($row)){ 
 
      return $row->project_name; 
 
     }else{ 
 
      return ""; 
 
     } 
 
}