2015-04-16 69 views
4

我在Apache xampp上使用Codeigniter並嘗試在視圖中第一次使用foreach,並且我無法使其工作。使用foreach的Codeigniter

我的控制器代碼:

class Test extends CI_Controller { 

     public function index($page = 'testv') 
    { 
      if (! file_exists(APPPATH.'/views/'.$page.'.php')) 
      { 
       show_404(); 
      } 
       $this->load->model('testm'); 
       $data['news'] = $this->testm->get_news(); 

       $this->load->view('headder'); 
       $this->load->view($page, $data); 
       $this->load->view('footer'); 
    } 
} 

我的模型:

class Testm extends CI_Model { 

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

    Public function get_news() 
    { 
     $query = $this->db->query('SELECT id, date, text FROM news'); 

     foreach ($query->result_array() as $row) 
     { 
      echo $row['id']; 
      echo $row['date']; 
      echo $row['text']; 
     } 
    } 
} 

筆者認爲:

<main id='central_section'> 
    <section id='logo_section'> 
    <img src='<?php echo base_url(); ?>img/logo.png' id='small_logo' alt="Logo"> 
    </section> 
    <section id='content'> 
     <p class="large_headding">News</p> 

      <?php foreach($news as $news) { ?> 
       <article class="article_text"> 
        <p class="segment_headding"><?php echo $news->date; ?></p> 
         <?php echo $news->text; ?> 
       </article> 
      <?php } ?> 
     <div id="spacer"></div> 
    </section> 
</main> 

目前我得到以下警告消息:

A PHP Error was encountered 

Severity: Warning 

Message: Invalid argument supplied for foreach() 

Filename: views/testv.php 

Line Number: 18 

Backtrace: 

File: C:\xampp\htdocs\tsh\CI\application\views\testv.php 
Line: 18 
Function: _error_handler 

File: C:\xampp\htdocs\tsh\CI\application\controllers\test.php 
Line: 16 
Function: view 

File: C:\xampp\htdocs\tsh\public_html\index.php 
Line: 292 
Function: require_once 

但是我的數據庫中的文本確實出現在頁面頂部的頁面頂部,所以我知道數據庫正在連接,並且正在收集它的數據。誰能告訴我我要去哪裏?

回答

1

你只需要在你的模型功能foreach循環問題,只是替換成:在你看來

$query = $this->db->query('SELECT id, date, text FROM news'); 
$result = $query->result_array(); 
return $result; 
+0

謝謝,對視圖文件進行一些調整,以改變<?php echo $ news-> date; ?> to <?php echo $ news ['date']; ?>這工作完美! – Tessa

3

在你的控制你正確分配模型的變量的結果:

$data['news'] = $this->testm->get_news(); 

,但在模型中你呼應結果,而不是RETURNING他們。 SO $data['news']null(因爲模型的方法不會返回任何內容),並且您無法遍歷null of course - >,這是您視圖中的錯誤。改變你的模型返回一個數組,例如:

Public function get_news() 
{ 
    $query = $this->db->query('SELECT id, date, text FROM news'); 
    return $query->result_array(); 
} 

文本從我的數據庫並顯示在頁面

,因爲事實上,你是呼應它的頂部(如上面所指出的)的輸出的意見之前,這就是爲什麼你之前看到他們呈現的HTML

+0

我不知道爲什麼我一直downvoted,請enligthen我 –

+0

不是我,我投票給你,因爲我發現你的解釋非常有用。我沒有把你的標記作爲正確的答案的唯一原因是伊姆蘭首先回答,他的回答雖然沒有包括太多細節,但回答了我的問題。沒有冒犯的意思。 – Tessa

1
 <?php foreach($news as $new) { ?> 
      <article class="article_text"> 
       <p class="segment_headding"><?php echo $new->date; ?></p> 
        <?php echo $new->text; ?> 
      </article> 
     <?php } ?> 

嘗試foreach($news as $new)而不是foreach($news as $news)

1

使用

foreach($thing as $something): //it is important if not compulsory to use a different name for variables!! 
some HTML 
endforeach; 

代替

2

請試試這個頁碼:

<?php foreach($news->result() as $new) { ?> 
     <article class="article_text"> 
      <p class="segment_headding"><?php echo $new->date; ?></p> 
       <?php echo $new->text; ?> 
     </article> 
    <?php } ?> 
1

試試這個你的答案:

控制器:

public function index($page = 'testv') 
{ 
     if (! file_exists(APPPATH.'/views/'.$page.'.php')) 
     { 
      show_404(); 
     } 
      $this->load->model('testm'); 
      $data['news'] = $this->testm->get_news(); 

      $this->load->view('headder'); 
      $this->load->view($page, $data); 
      $this->load->view('footer'); 
} 

模式功能:

Public function get_news() 
{ 
    $query = $this->db->query('SELECT id, date, text FROM news'); 
    return $query; 
} 

在視圖文件:

<?php foreach($news->result() as $new) { ?> 
    <article class="article_text"> 
     <p class="segment_headding"><?php echo $new->date; ?></p> 
      <?php echo $new->text; ?> 
    </article> 
<?php } ?>