从CodeIgniter

时间:2017-12-08 01:03:54

标签: php mysql codeigniter fetch codeigniter-3

我正在使用社交网络应用。 我遇到了一个问题,我试图从我的数据库中名为users的表中获取名称和用户名。 为了能够在不单独访问所有控制器的情况下执行此操作,我必须创建一个名为MY_Controller的Core控制器。

这是问题(没有公共$ users的MY_Controller):

<?php

class MY_Controller extends CI_Controller
{

//public $users = array('username' => $this->input->post('username')); 


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

        //Get user data to make it available for both Admin and Public Controllers
        $this->load->model('User_model');
        $this->users = $this->User_model->get_list();

        //Load Menu Library
        $this->load->library('menu');
        $this->pages = $this->menu->get_pages();

        // Brand/Logo
        $this->favicon = 'https://blogpersonal.net/wp-content/uploads/2017/08/favicon-v2-150x150.png';
        $this->brand = 'Some Name';
        $this->description = 'Some Description';
        $this->credits = 'https://blogpersonal.net/';
        $this->version = '1.1.1';
    }
}

class Admin_Controller extends MY_Controller
{

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

        if (!$this->session->is_admin) {
            redirect('admin/login');
        }

        //some code here

    }
}

class Public_Controller extends MY_Controller{
    function __construct(){
        parent::__construct();

        //some code here

    }

}

class Social_Controller extends MY_Controller
{

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

        if (!$this->session->is_member) {
            redirect('dashboard/login');
        }

        //some code here

    }
}

正如您所看到的,我使用__construct函数加载User_model以使其可用并在所有控制器中使用它。

我想在名为templates的文件夹中获取数据。 观看&gt;模板&gt;任何文件,但是当我尝试在这样的视图中获取它时:

    <?php if($this->users) : ?>
        <li class="dropdown user user-menu">
          <!-- Menu Toggle Button -->
          <a href="#" class="dropdown-toggle" data-toggle="dropdown">
            <!-- The user image in the navbar-->
            <img src="<?php echo base_url(); ?>assets/img/user2-160x160.jpg" class="user-image" alt="User Image">
            <!-- hidden-xs hides the username on small devices so only the image appears. -->
            <span class="hidden-xs"><?php echo $this->users['username']; ?></span>
          </a>

        </li>
    <?php endif; ?>

这是旧错误。它告诉我一个错误。难道我做错了什么?有人可以解释我如何解决它。这是我第一次无法获取数据。 这是我得到的结果:

  

遇到PHP错误

     

严重性:注意

     

消息:未定义的变量:用户

     

文件名:Templates / public.php

     

行号:161

     

回溯:

     

文件:   C:\ XAMPP \ htdocs中\笨\程序\意见\模板\ public.php   行:161功能:_error_handler

     

文件:C:\ xampp \ htdocs \ codeigniter \ application \ libraries \ Template.php   行:34功能:视图

     

文件:C:\ xampp \ htdocs \ codeigniter \ application \ controllers \ Pages.php   行:12功能:加载

     

文件:C:\ xampp \ htdocs \ codeigniter \ index.php行:315功能:   require_once

以下是我的模型(User_model),以防您可能需要它:

<?php

class User_model extends CI_MODEL
{

    function __construct()
    {
        parent::__construct();
        $this->table = 'users';
    }

    public function get_list()
    {
        $query = $this->db->get($this->table);
        return $query->result();
    }

    public function get($id)
    {
        $this->db->where('id', $id);
        $query = $this->db->get($this->table);
        return $query->row();
    }

    public function add($data)
    {
        $this->db->insert($this->table, $data);
    }

    public function update($id, $data)
    {
        $this->db->where('id', $id);
        $this->db->update($this->table, $data);
    }

    public function delete($id)
    {
        $this->db->where('id', $id);
        $this->db->delete($this->table);
    }

    public function login($username, $password)
    {
        $this->db->select('*');
        $this->db->from($this->table);
        $this->db->where('username', $username);
        $this->db->where('password', $password);
        $this->db->limit(1);

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

        if ($query->num_rows() == 1) {
            return $query->row()->id;
        } else {
            return false;
        }
    }
}

现在有了我建议的更改,它现在显示一个新错误:

新错误:

  

遇到PHP错误

     

严重性:通知消息:未定义索引:用户名文件名:   Templates / public.php行号:168

     

回溯:

     

文件:   C:\ XAMPP \ htdocs中\笨\程序\意见\模板\ public.php   行:168功能:_error_handler

     

文件:C:\ xampp \ htdocs \ codeigniter \ application \ libraries \ Template.php   行:34功能:视图

     

文件:   C:\ XAMPP \ htdocs中\笨\程序\控制器\ PUBLIC \ Dashboard.php   行:13功能:加载

     

文件:C:\ xampp \ htdocs \ codeigniter \ index.php行:315功能:   require_once

现在,如果取消注释Core控制器(MY_Controller)中的公共$用户,它也会显示一个新错误:

__construct函数中公共$ users的新错误

  

致命错误:常量表达式包含无效操作   C:\ xampp \ htdocs \ codeigniter \ application \ core \ MY_Controller.php在线   6遇到PHP错误

     

严重性:编译错误

     

消息:常量表达式包含无效操作

     

文件名:core / MY_Controller.php

     

行号:6

     

回溯:

以下是我试图将数据发送到的图片:

enter image description here

我做错了吗?谢谢你的帮助。

这是视图(public.php)文件:

<ul class="nav navbar-nav">
          <?php if(!$this->session->is_member) : ?>
          <li><?php echo anchor('public/users/login', 'Login'); ?></li>
          <li><?php echo anchor('public/users/register', 'Register'); ?></li>
          <?php else : ?>
            <!-- Messages: style can be found in dropdown.less-->
            <li class="dropdown messages-menu">
              <!-- Menu toggle button -->
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                <i class="fa fa-envelope-o"></i>
                <span class="label label-success">4</span>
              </a>
              <ul class="dropdown-menu">
                <li class="header">You have 4 messages</li>
                <li>
                  <!-- inner menu: contains the messages -->
                  <ul class="menu">
                    <li><!-- start message -->
                      <a href="#">
                        <div class="pull-left">
                          <!-- User Image -->
                          <img src="<?php echo base_url(); ?>assets/img/user2-160x160.jpg" class="img-circle" alt="User Image">
                        </div>
                        <!-- Message title and timestamp -->
                        <h4>
                          Support Team
                          <small><i class="fa fa-clock-o"></i> 5 mins</small>
                        </h4>
                        <!-- The message -->
                        <p>Why not buy a new awesome theme?</p>
                      </a>
                    </li>
                    <!-- end message -->
                  </ul>
                  <!-- /.menu -->
                </li>
                <li class="footer"><a href="#">See All Messages</a></li>
              </ul>
            </li>
            <!-- /.messages-menu -->
            <!-- Notifications Menu -->
            <li class="dropdown notifications-menu">
              <!-- Menu toggle button -->
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                <i class="fa fa-bell-o"></i>
                <span class="label label-warning">10</span>
              </a>
              <ul class="dropdown-menu">
                <li class="header">You have 10 notifications</li>
                <li>
                  <!-- Inner Menu: contains the notifications -->
                  <ul class="menu">
                    <li><!-- start notification -->
                      <a href="#">
                        <i class="fa fa-users text-aqua"></i> 5 new members joined today
                      </a>
                    </li>
                    <!-- end notification -->
                  </ul>
                </li>
                <li class="footer"><a href="#">View all</a></li>
              </ul>
            </li>
            <!-- Tasks Menu -->
            <li class="dropdown tasks-menu">
              <!-- Menu Toggle Button -->
              <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                <i class="fa fa-flag-o"></i>
                <span class="label label-danger">9</span>
              </a>
              <ul class="dropdown-menu">
                <li class="header">You have 9 tasks</li>
                <li>
                  <!-- Inner menu: contains the tasks -->
                  <ul class="menu">
                    <li><!-- Task item -->
                      <a href="#">
                        <!-- Task title and progress text -->
                        <h3>
                          Design some buttons
                          <small class="pull-right">20%</small>
                        </h3>
                        <!-- The progress bar -->
                        <div class="progress xs">
                          <!-- Change the css width attribute to simulate progress -->
                          <div class="progress-bar progress-bar-aqua" style="width: 20%" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">
                            <span class="sr-only">20% Complete</span>
                          </div>
                        </div>
                      </a>
                    </li>
                    <!-- end task item -->
                  </ul>
                </li>
                <li class="footer">
                  <a href="#">View all tasks</a>
                </li>
              </ul>
            </li>
            <!-- User Account Menu -->
            <?php if($this->users) : ?>
                <li class="dropdown user user-menu">
                  <!-- Menu Toggle Button -->
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                    <!-- The user image in the navbar-->
                    <img src="<?php echo base_url(); ?>assets/img/user2-160x160.jpg" class="user-image" alt="User Image">
                    <!-- hidden-xs hides the username on small devices so only the image appears. -->
                    <span class="hidden-xs"><?php echo $this->users['username']; ?></span>
                  </a>
                  <ul class="dropdown-menu">
                    <!-- The user image in the menu -->
                    <li class="user-header">
                    <img src="<?php echo base_url(); ?>assets/img/user2-160x160.jpg" class="img-circle" alt="User Image">
                      <p><?php echo $this->users['name']; ?> - Web Developer<small>Member since Nov. 2012</small></p>
                    </li>
                    <!-- Menu Body -->
                    <li class="user-body">
                      <div class="row">
                        <div class="col-xs-4 text-center">
                          <a href="#">Followers</a>
                        </div>
                        <div class="col-xs-4 text-center">
                          <a href="#">Sales</a>
                        </div>
                        <div class="col-xs-4 text-center">
                          <a href="#">Friends</a>
                        </div>
                      </div>
                      <!-- /.row -->
                    </li>
                    <!-- Menu Footer-->
                    <li class="user-footer">
                      <div class="pull-left">
                        <a href="#" class="btn btn-default btn-flat">Profile</a>
                      </div>
                      <div class="pull-right">
                        <a href="<?php echo base_url(); ?>public/users/logout" class="btn btn-default btn-flat">Sign out</a>
                      </div>
                    </li>
                  </ul>
                </li>
            <?php endif; ?>
            <li>
                <a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
            </li>
          <?php endif; ?>
          </ul>

2 个答案:

答案 0 :(得分:1)

你现在有这个......我只是在这里展示片段......

class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

        //Get user data to make it available for both Admin and Public Controllers
        $this->load->model('User_model');
        $data['users'] = $this->User_model->get_list();

<<<<snip>>>>

有人建议您将本地定义的$ data [&#39;用户&#39;]转换为&#34; Property&#34;

所以我们现在有两个改变......

1声明属性

2设置属性。

class MY_Controller extends CI_Controller
{
    public $users = array(); // Add the property $user, safe def of an empty array

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

        //Get user data to make it available for both Admin and Public Controllers
        $this->load->model('User_model');
        //$data['users'] = $this->User_model->get_list();
        // Give the property something to share. 
        $this->users = $this->User_model->get_list();


    <<<<snip>>>>

现在,扩展MY_Controller的所有控制器现在都可以访问在MY_Controller中创建的$ this-&gt;用户......

因此,您可以在其中使用 $ this-&gt; users

我建议您先阅读类,属性,方法和继承。通常这足以让你变得危险。它需要一点点习惯,但值得努力......

<强>更新 在您调用View的控制器中,您可以执行此操作 $ data [&#39; users&#39;] = $ this-&gt; users;

在您看来,您现在将其称为$ users-&gt; field_name,就像之前一样。 我们所做的只是在您的基类中定义$ users,现在可以作为$ this-&gt;用户访问,以便所有扩展MY_Controller类的控制器/方法都可以访问它。

答案 1 :(得分:0)

你现在有这个。

class MY_Controller extends CI_Controller
{

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

    //Get user data to make it available for both Admin and Public Controllers
    $this->load->model('User_model');
    $data['users'] = $this->User_model->get_list();

您应该使用$ this-&gt;数据[&#39;用户&#39;]代替$ data

class MY_Controller extends CI_Controller
{

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

    //Get user data to make it available for both Admin and Public Controllers
    $this->load->model('User_model');
    $this->data['users'] = $this->User_model->get_list();

加载视图时,请使用以下代码

$this->load->view('view_name',$this->data);

它将显示存储在父类构造函数

中的所有变量(在视图中)