【问题标题】:Codeigniter Error : Trying to get property of non-object [duplicate]Codeigniter 错误:试图获取非对象的属性 [重复]
【发布时间】:2013-01-21 15:22:22
【问题描述】:

我无法理解为什么这个错误会一次又一次地出现。 基本上我正在尝试编辑学生的数据

我正在使用以下文件:

控制器 - 学生

查看 - students_edit

模型 - codegen_model

我的控制器如下:

函数编辑(){
$this->load->library('form_validation'); $this->data['custom_error'] = '';

    if ($this->form_validation->run('students') == false)
    {
         $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">'.validation_errors().'</div>' : false);

    } else
    {                            
        $data = array(
                'username' => $this->input->post('username'),
                'password' => $this->input->post('password'),                     
                'phone' => $this->input->post('phone'),
                'email' => $this->input->post('email'),

        );
                  if ($this->codegen_model->edit('students',$data,'id',$this->input->post('id'))== TRUE)          {
          redirect(base_url().'index.php/students/manage/');          }           else            {
          $this->data['custom_error'] = '<div class="form_error"><p>An Error Occured</p></div>';

      }       }

  $this->data['result'] = $this->codegen_model->get('students', 'id,username,password,phone,email', 'id = '.$this->uri->segment(3),NULL,NULL,true);
          $this->load->view('students_edit', $this->data);        
}

观点如下:

<?php     

echo form_open(current_url()); ?>
<?php echo $custom_error; ?>
<?php echo form_hidden('id',$result->id) ?>

        <p>                         
        <input id="username" type="text" name="username" value="<?php echo $result->username ?>"  />
        <?php echo form_error('username','<div>','</div>'); ?>
        </p>


        <p>                         
        <input id="password" type="password" name="password" value="<?php echo $result->password ?>"  />
        <?php echo form_error('password','<div>','</div>'); ?>
        </p>

<p>     <input id="phone" type="text" name="phone" value="<?php echo $result->phone ?>"  />
        <?php echo form_error('phone','<div>','</div>'); ?>
        </p>


        <p>                         
        <input id="email" type="text" name="email" value="<?php echo $result->email ?>"  />
        <?php echo form_error('email','<div>','</div>'); ?>
        </p>       

        <?php echo form_submit( 'submit', 'Submit'); ?>
</p>

<?php echo form_close(); ?>

Codegen_model如下:

function get($table,$fields,$where='',$perpage=0,$start=0,$one=false,$array='array'){

    $this->db->select($fields);
    $this->db->from($table);
    $this->db->limit($perpage,$start);
    if($where){
    $this->db->where($where);
    }

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

    $result =  !$one  ? $query->result($array) : $query->row() ;
    return $result;
}

当我尝试加载视图 student_edit 时出现以下错误:

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: views/students_edit.php

Line Number: 5

当我尝试result-&gt;id 和其他示例时,它工作正常,但在这里我无法弄清楚错误在哪里。

任何解决方案都会有很大帮助。提前致谢。 数控

答案:

代码似乎运行良好,但唯一的问题在于查询,@Rick 说的是对的。

【问题讨论】:

  • 不错,但问题不同

标签: php codeigniter


【解决方案1】:

听起来您的数据库查询有问题。我会用

die($this->db->last_query());

行后

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

然后尝试运行查询以查看是否有任何错误。

我还会在您的视图中进行一些检查,以查看 $result->id 是否存在,然后再将其回显以避免错误

【讨论】:

  • 我试过 print_r($result);但它显示一个空数组
  • 也死了($this->db->last_query());没有任何区别,并且抛出相同的错误。
  • 您的第一条评论就是您的答案。如果 $result 在模型中返回一个空数组,那么它不会向视图发送对象。您的查询失败。如果您要发送应该返回结果的查询数据,您需要解决原因,您还需要处理视图中结果为空的可能性。这意味着如果用户要求提供不存在的数据,视图需要比失败更优雅地处理。
  • 哦,好的。。非常感谢,问题出在这里 $this->db->limit($perpage,$start);我都通过了 0, 0 .. $perpage 和 $start..
  • @Rick Calder:非常感谢。我会牢记这些要点
【解决方案2】:

我怀疑问题是 codegen_model-&gt;get 返回 null 不是对象的东西。应该是null

尝试使用var_dump($result) 来查看您从$this-&gt;codegen_model-&gt;get('students', 'id,username,password,phone,email', 'id = '.$this-&gt;uri-&gt;segment(3),NULL,NULL,true); 获得的确切信息

顺便说一句,那个可待因模型......这不是你应该在 CI 中使用模型的方式。

【讨论】:

  • var_dump($result) 正在抛出一个空集:array(0) { }。但是查询语句似乎是正确的???我应该如何使用 codegen_model ??
  • 我看到你修正了你的答案。所以与模型相关,你应该有一个students_model,并且应该有一个处理与学生表交互的方法(get_by_id()、add()、update() 等)在这里阅读更多ellislab.com/codeigniter/user-guide/general/models.html跨度>
  • 是的,但我有一个通用模型,所以我给了一个通用名称。无论如何感谢您的信息
  • 是的,但是“通用模型”与从控制器调用 $this->db 有何不同? MVC 的全部意义在于控制器不知道您拥有哪些数据库表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 2011-07-07
  • 2013-06-12
相关资源
最近更新 更多