【问题标题】:Can not access variables in Codeigniter无法访问 Codeigniter 中的变量
【发布时间】:2016-07-20 19:51:17
【问题描述】:

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

关于为什么会出现这个错误以及如何解决它的任何建议?

【问题讨论】:

  • 你检查的网址是什么?
  • 需要使用那行代码来允许页面加载。
  • 可能是您的查询没有返回任何记录

标签: php codeigniter model-view-controller


【解决方案1】:

无法发表评论:/

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

localhost/projectname/page/view_users

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

localhost/projectname/page/getUsers

您也应该阅读路线

【讨论】:

  • 是的,我会在您建议的链接中获得结果,但是我确实丢失了所有引导程序和模板。我只会在我的屏幕上得到一个数组,其中包含来自表的用户信息。
  • 您应该在 标记中编写正确的链接,就像您将要写的一样 我的意思是说,正确链接到 css 文件所在的目录。再次坚持让你阅读 MVC 中的路由。
  • 如果我使用 localhost/projectname/view_users,我的网站运行良好......我所需要的只是找到一种方法让 view_users.php 接收 $data。有什么建议吗?
  • 我确实按照您的建议定义了我的样式链接。问题是您建议访问我的 URL 中的功能...那样我将无法再访问我的任何页面!
  • 尝试 localhost/book/page/getUsers 并添加标题视图public function getUsers(){ $data= array(); $this-&gt;load-&gt;model('model_users'); $data['users'] = $this-&gt;model_users-&gt;getUsers1(); $this-&gt;load-&gt;view('templates/header'); $this-&gt;load-&gt;view('pages/view_users', $data); }
【解决方案2】:

请将此代码放入Controller

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

【讨论】:

  • 比我快几秒!!
  • 我当前的代码中已经有你的建议......但它不起作用......
  • 我在问题的最后输入了错误。谢谢。
  • @Saty 但 OP 仍然没有得到解决方案。
  • @Irfana 删除这个 $data= array(); 并尝试
【解决方案3】:

您的代码是正确的。但是,如果您的查询返回空结果,那么这里的$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 [];
        }
    }
}

【讨论】:

  • 我做了你建议的修改,现在它仍然给出错误并且它显示“未找到记录”。有什么建议吗?
  • @Irfana 检查你的桌子。有记录吗?
  • @PathikVejani 是的,我的表中有记录。
  • @Irfana 将此 return $query-&gt;result(); 更改为 return $query-&gt;result_array();
  • 你也更新模型了吗?和@PathikVejani:无需将结果更改为 result_array
【解决方案4】:

嗯,

你可以这样做:

 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”并不美观。

【讨论】:

  • 我用你的代码试过了,然后用了 localhost/book/getusers 但没用。
  • 错误写在问题的最后。
【解决方案5】:

先试试你的数组有没有结果。

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

【讨论】:

  • 是的,刚刚检查过,数组正在给出结果并显示表格数据。问题是视图页面(view_users.php)没有从控制器接收$data。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 2020-12-13
相关资源
最近更新 更多