2012-02-28 92 views
0

我還是PHP和MVC概念的新手。我一直在嘗試複製CI新聞教程(http://codeigniter.com/user_guide/tutorial/news_section.html),同時使用我自己的數據庫並重寫代碼。消息:未定義的變量:在查看頁面

我一直沒有成功。

這裏是我的控制器:

class Main extends CI_Controller 
{ 

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

    $this->load->helper('url'); 
    $this->load->library('tank_auth'); 
    $this->load->model('structures_model'); 
} 

public function structures() 
{ 
    $this->load->model('structures_model'); 
    if (!$this->tank_auth->is_logged_in()) { 
     redirect('/auth/login/'); 
    } else { 
     $data['structures_all'] = $this->structures_model->get_structures(); 
     $this->load->view('templates/header', $data); 
     $this->load->view('templates/navmain', $data); 
     $this->load->view('structures', $data); 
     $this->load->view('templates/footer', $data); 
    } 
} 

這裏是我的模型(structures_model)

<?php 
class Structures_model extends CI_Model { 

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

public function get_structures() 
{ 
    $query = $this->db->get('structures'); 
    return $query->result_array(); 
} 

} 

而我的觀點:

<?php foreach ($structures_all as $structures_info): ?> 
<h2>Structures</h2> 
<div id="main"> 
    <?php echo $structures_info['str_name'] ?> 
</div> 
<?php endforeach ?> 

錯誤即時得到的是共同的:

A PHP Error was encountered< 
Severity: Notice 
Message: Undefined variable: structures_all 
Filename: main/structures.php 
Line Number: 2 

我不知所措。我已經查看了人們所得到的所有類似錯誤,但無法弄清楚爲什麼沒有定義structure_all數組。它不應該創建在我設置的控制器功能中:

$data['structures_all'] = $this->structures_model->get_structures(); 

我在想什麼?

+0

你確定數據庫中有數據要填充數組嗎? – Cfreak 2012-02-28 17:58:48

+0

我在phpmyadmin中運行了查詢,並返回了所需的結果。 另外,我在教程中創建的「新聞」表格工作正常,所以我知道數據庫配置是正確的。 – 2012-02-28 18:09:05

+0

你爲什麼要加載模型兩次?你有沒有嘗試將變量設置爲空數組而不是調用數據庫?或者嘗試聲明並輸出一個簡單的文本變量。所以我們可以將問題縮小到視圖或模型。 – florian 2012-02-28 18:16:31

回答

1

調試這一點,最好的辦法是分配$data['structures_all']一定數組值,說:$data['structures_all'] = array('foo' => 'bar');

是在$structures_all變量可用在現在的看法?如果可用,則知道$this->structures_model->get_structures();正在返回null

你的數據庫中有一張名爲structures的表嗎?

您確定您的數據庫連接詳細信息填寫在config/database.php

你有PHP的錯誤報告設置爲所有?可能有隱藏的消息...在控制器的構造函數中調用error_reporting(E_ALL);

也可以嘗試呼應:$this->db->last_query();,以驗證您的查詢正在建造你在phpMyAdmin試圖以同樣的方式...

希望這讓你在正確的軌道上。

+0

我第一次嘗試你的建議,將我的數組設置爲'$ data ['structures_all'] = array('foo'=>'bar');' 爲了清楚起見,我將它添加到我的控制器中,在公共功能「結構」下面的「Main」。我也暫時刪除了'$ data ['structures_all'] = $ this-> structures_model-> get_structures();'線。 我遇到了同樣的錯誤。但是,這一次,我收到了爲foreach()錯誤提供的無效參數。 – 2012-02-28 19:49:57

+0

我檢查了我的數據庫配置,並將其設置爲正確的數據庫,並且存在該表。我目前通過tank_auth連接到數據庫,並且它正在成功顯示我的用戶名,所以我知道數據庫配置不是問題。我也進行了四次檢查,以確保表名沒有拼寫錯誤。我也設置了error_reporting(E_ALL);並沒有看到任何其他錯誤消息 – 2012-02-28 19:52:46

+0

在你最後一個建議中,關於驗證我的查詢,它給了我一個新的錯誤:'CI_DB_mysql_driver類的對象無法轉換爲字符串' – 2012-02-28 20:02:39

相關問題