未定义的变量&在CodeIgniter中为foreach()提供的参数无效

时间:2016-01-10 05:51:40

标签: php html codeigniter

我有以下代码查询数据库并在视图中显示它。

However, I am getting these error:
 - Message: Undefined variable: portfolio         Filename: portfolio/home.php
 - Message: Invalid argument supplied for foreach()     Filename: portfolio/home.php

我该如何解决错误?

Controller(Portfolio.php)

<?php
    class Portfolio extends CI_Controller {

            public function view($portfolio = 'home')
            {
                    if ( ! file_exists(APPPATH.'/views/portfolio/'.$portfolio.'.php'))
                    {
                            // Whoops, we don't have a page for that!
                            show_404();
                    }

                    $data['title'] = ucfirst($portfolio); // Capitalize the first letter

                    $this->load->view('templates/header', $data);
                    $this->load->view('portfolio/'.$portfolio, $data);
                    $this->load->view('templates/footer', $data);
            }

            public function __construct()
            {
                    parent::__construct();
                    $this->load->model('portfolio_model');
                    $this->load->helper('url_helper');
            }

            public function index()
            {
                    $data['portfolio'] = $this->portfolio_model->get_portfolio();

                    $this->load->view('templates/header', $data);
                    $this->load->view('portfolio/home', $data);
                    $this->load->view('templates/footer');
            }
    }
?>

模型(Portfolio_model)

<?php
class Portfolio_model extends CI_Model {

        public function __construct()
        {
                $this->load->database();
        }

        public function get_portfolio()
        {
                $query = $this->db->select('title')->from('webinfo')->get();
                return $query->result_array();
        }
}
?>

查看(home.php)

<?php foreach ($portfolio as $portfolio_item): ?>
    <h3><?php echo $portfolio_item['title']; ?></h3>
<?php endforeach; ?>

routes.php文件

$route['portfolio/(:any)'] = 'portfolio/view/$1';
$route['portfolio'] = 'portfolio';
$route['default_controller'] = 'portfolio/view';
$route['(:any)'] = 'portfolio/view/$1';

enter image description here

1 个答案:

答案 0 :(得分:0)

一些事情可能有效

模型

public function get_portfolio() {
   $query = $this->db->get('webinfo');

   if ($query->num_rows() > 0 ) {
     return $query->result_array();
   } else {
     return FALSE;
   }
}

在控制器上

<?php

class Portfolio extends CI_Controller {

public function __construct() {
   parent::__construct();
   $this->load->model('portfolio_model');
   $this->load->helper('url');
}

public function index() {
   $data['portfolio'] = array();

   $results = $this->portfolio_model->get_portfolio();

   // You may need to remove !
   if (!isset($results) {
     foreach ($results as $result) {
       $data['portfolio'][] = array(
         'title' => $result['title']
       );
     }
   }

   $this->load->view('templates/header', $data);
   $this->load->view('portfolio/home', $data);
   $this->load->view('templates/footer');
}

public function view($portfolio = 'home') {
  if (!file_exists(APPPATH.'/views/portfolio/'.$portfolio.'.php')) {
     show_404();
  }

 $data['title'] = ucfirst($portfolio); // Capitalize the first letter

 $this->load->view('templates/header', $data);
 $this->load->view('portfolio/'.$portfolio, $data);
 $this->load->view('templates/footer', $data);
}

}

查看

<?php if ($portfolio) {?>
    <?php foreach ($portfolio as $portfolio_item) { ?>
        <h3><?php echo $portfolio_item['title']; ?></h3>
    <?php } ?>
<?php } else { ?>
        <h3>No Result</h3>
<?php } ?>

我还建议自动加载数据库

$autoload['libraries'] = array('database');

而不是使用$this->load->database();