无法访问Codeigniter中的变量

时间:2016-04-01 05:52:44

标签: php codeigniter model-view-controller

Codeigniter框架的新手。我试图简单地从数据库中读取用户信息,并在视图中的表中显示结果。 (我的网站上有6页,每页都要显示一些用户数据)

默认控制器:

class Pages extends CI_Controller {

    public function view($page = 'home') {

        $this->load->helper('url');

            $this->load->view('templates/header');
            $this->load->view('pages/' . $page);
    }

    public function getUsers(){
            $data= array();
            $this->load->model('model_users');
            $data['users'] = $this->model_users->getUsers1();
            $this->load->view('pages/view_users', $data);
        }
}

型号:

class Model_users extends CI_Model {

    function __construct() {                             
        parent::__construct();

    }    
        function getUsers1(){            
        $query = $this->db->query('SELECT * FROM user');
        if($query->num_rows()>0){             
            return $query->result(); 
        } else {
            return NULL;
        }
    }
}

查看:

    <table>
         <tr>
             <td><strong>user ID</strong></td>
         </tr>
<?php foreach ($users as $user) { ?>
         <tr>
             <td><?php echo $user->id; ?></td>
         </tr>
<?php } ?>
     </table>

错误:

Severity: Notice

Message: Undefined variable: users

Filename: pages/view_users.php

有关此错误发生原因及解决方法的任何建议?

5 个答案:

答案 0 :(得分:2)

请将此代码放入控制器

$this->load->view('pages/view_users',$data);

答案 1 :(得分:2)

无法发表评论:/

您收到错误是因为您直接从浏览器地址栏访问视图文件:

localhost/projectname/page/view_users

请访问您的控制器的操作,如下所示:

localhost/projectname/page/getUsers

您还应该阅读有关路线的信息

答案 2 :(得分:1)

你的代码是对的。但是,如果您的查询返回空结果,那么此处$users变为NULL,因此它会在视图上出错。将if放在foreach之前。见下面的代码

    <table>
     <tr>
         <td><strong>user ID</strong></td>
     </tr>
     <?php
           if(!empty($users)){ foreach ($users as $user) { ?>
     <tr>
         <td><?php echo $user->id; ?></td>
     </tr>
     <?php }}else{ ?>
       <tr>
         <td>No record found</td>
     </tr>
     <?php } ?>
 </table>

在模型上

class Model_users extends CI_Model {

function __construct() {                             
    parent::__construct();

}    
    function getUsers1(){            
    $query = $this->db->query('SELECT * FROM user');
        if($query->num_rows()>0){             
            return $query->result(); 
        } else {
            return [];
        }
    }
}

答案 3 :(得分:0)

那么,

你可以这样做:

 public function getUsers(){

            $this->load->model('model_users');
            $users = $this->model_users->getUsers1();
            $this->load->view('pages/view_users', compact('users');
        }

Compact更干净,如果将来需要改变,将很容易。

访问您的网页:localhost / your_site / getusers

但是,如果您想使用此标准,请使用Routes。因为URL中的“getusers”并不漂亮。

答案 4 :(得分:0)

首先尝试你的数组是否给出任何结果。

public function getUsers(){
            $this->load->model('model_users');
            $data['users'] = $this->model_users->getUsers1();
            print_r($data['users']);
        }