2012-02-28 7 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

+0

私はphpmyadminの中でクエリを実行し、望ましい結果を返しました。 さらに、チュートリアルで作成した「ニュース」テーブルが正常に動作していたので、DB設定が正しいことがわかりました。 –

+0

なぜモデルを2回ロードしていますか?そして、データベースを呼び出す代わりに変数を空の配列に設定しようとしましたか?あるいは、単純なテキスト変数を宣言して出力しようとします。そこで、問題をビューまたはモデルに絞り込むことができました。 – florian

答えて

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);を呼び出してください。

うまくいけば、これは正しい軌道に乗ってあなたを置く...あなたのクエリはあなたがphpMyAdminをしてみました同じように構築されているかどうかを確認するために$this->db->last_query();

またエコーを試してみてください。

+0

私の配列を最初に '$ data [' structures_all '] = array(' foo '=>' bar ');' 私は公共の機能「構造」の下で私のコントローラ「Main」に追加しました。私は一時的に$ data ['structures_all'] = $ this-> structures_model-> get_structures();を削除しました。ライン。 同じエラーが発生しました。しかし今回は、foreach()エラーのために無効な引数が渡されました。 –

+0

私は自分のDBの設定とそのセットを正しいDBにチェックしました。テーブルが存在します。私は現在、tank_auth経由でDBに接続しています。ユーザー名が表示されているので、DB設定が問題ではないことがわかります。テーブル名のスペルが間違っていないことを確認するために4回チェックしました。私はerror_reporting(E_ALL)も設定しました。 –

+0

あなたの最後の提案では、私のクエリを確認する上で、私に新しいエラーが表示されます: 'クラスCI_DB_mysql_driverのオブジェクトを文字列に変換できませんでした' –