0

次のエラーが表示されます: undefined variable: section in my home_view controller. home_view.php に 17 行目を含めましたが、すべての変数を正しく渡していると確信しています。なぜこのエラーが発生するのですか?


  <?php

    class Student extends CI_Controller  {


    function index()
          {
            $this->load->model('student_model');
            $data['section']= $this->student_model->browse_section();
            $this->load->view('home_view',$data);
          }

       }

Student_model.php

<?php

Class Student_Model extends CI_Model 
{

function browse_section() 
    {

    $q = $this->db->get('section');

        if($q->num_rows > 0 )
        {
        foreach ($q ->result() as $row )
                {
                $data[] = $row ;
                }
        }

        return $data;
    }

}

Home_view.php

 <?php foreach($section as $r){
    echo '<h1>' . $r->Time . '</h1>' ; 
}
?>
4

4 に答える 4

2

発生しているエラーについて説明し、後で修正します

モデルのクエリから始めましょう

<?php

Class Student_Model extends CI_Model 
{

function browse_section() 
    {

    $q = $this->db->get('section');

        if($q->num_rows > 0 )
        {
        foreach ($q ->result() as $row )
                {
                $data[] = $row ;
                }
        }

        return $data;
    }

}

明らかに、データベースからの結果セットが EMPTY の場合、$data には値が提供されず、コントローラーに返される値function browse_section()return $data;NULL になり、ビューに渡されると 100% エラーが発生します。ループ。

問題を修正するためのいくつかの提案があります 1.) 関数に戻り値を割り当てる前に、デフォルト値があること$data = array(); on the first line in browse_section model function will do.を確認してください。値は返されません。2.) データベース レコードの抽出に result_array() を使用することをお勧めします。配列操作には c の方が適しています。


コントローラーについては、何も変更する必要はありません。

__ モデルで使用することにした場合のビューについてresult_array()foreach を変更できますが、これはオプションです

 <?php foreach($section as $key => $value){
    echo '<h1>' . $value['Time'] . '</h1>' ; 
}
?>

しかし、必ず入れてください

if(!is_null($section) && count($section) > 0) { 
//foreach here
}

このセリフはきっとあなたを救う!

ハッピーコーディングマイフレンド!

于 2012-08-25T09:15:31.200 に答える
1

問題は次の行です。

$data['section']= $this->student_model->browse_section();

定義していないだけでなく$data、キーもsection定義していません。配列のドキュメントを見てください:

ノート:

定義されていない配列キーにアクセスしようとすることは、他の未定義変数にアクセスすることと同じです。E_NOTICE レベルのエラー メッセージが発行され、結果は NULL になります。

何を達成しようとしているのかはわかりませんが、Studentコントローラーのコードを修正するにはこれで十分かもしれません。

$this->load->model('student_model');
$data = array();
$data['section']= $this->student_model->browse_section();
$this->load->view('home_view',$data);

モデルのパーツを修正するには、KDaker のヒントに従ってください。

また、PHP の未定義変数とは何かについても読んで、おそらくオブジェクト指向プログラミングに慣れてください。これにより、今後同様の、より重要な間違いを避けることができます。

于 2012-08-25T08:33:57.580 に答える
1

あなたの$data変数は未定義です。モデルの if 関数の前に定義する必要があります。

function browse_section() 
{

$q = $this->db->get('section');
$data = array(); //define the data array.

    if($q->num_rows > 0 )
    {
    foreach ($q ->result() as $row )
            {
            $data[] = $row ;
            }
    }

    return $data;
}

お役に立てれば

于 2012-08-25T05:53:04.447 に答える
0
  • モデルの foreach ループは必要ありません。$q->result() を返すだけです。
  • num_rows はメソッドなので、コードは次のようになります: $q->num_rows() の代わりに $q->num_rows
  • 開発環境で php 表示エラーを有効にしてみてください。これにより、この種のバグを数分で修正できます。

これらの点がさらに役立つことを願っています。

于 2012-08-25T06:13:36.480 に答える