2011-02-06 22 views
5

görüntülemeye geçiriyor Bu yüzden bu sorunu yaşıyorum, oldukça basit olmalı, ama neden anlayamadığımı bilmiyorum. MVC'nin tüm fikrine yeniyim ve denetleyicimden bir veritabanı sorgusunu bir görünüme aktarmaya ve sonuçları görünümde göstermeye çalışıyorum.Yaptığım şekilde şimdi "undefined variable, sql" yazıyor . Ben görünümü yüklediğinizde Bu benim ne var:sql sorgu sonuçlarını denetleyiciden kod tutucusu

KONTROL

function make_login() 
{ 
    //Select list of departments for dropdown 
    $this->load->database(); 
    $sql = $this->db->query('SELECT departmentName FROM department ORDER BY departmentName ASC'); 



    $this->load->view('siteheader.php'); 
    $this->load->view('makelogin.php', $sql->result_array()); 
    $this->load->view('sitefooter.php'); 
} 

gÖRÜNÜM

<?php 
foreach($sql->result_array() as $row) 
    { 
     echo $row['departmentName']; 
    } 
    ?> 

(sadece denetleyicisi bunu dışarı yankı, bu sonuçları görüntüler)

A ny yardım harika olurdu ... TEŞEKKÜRLER!

cevap

15

birkaç ipucu ~

sizin make_login bir model olmalıdır. Sonunda

function get_departments() 
{ 
    $sql = $this->db->query('SELECT departmentName FROM department ORDER BY departmentName ASC'); 
    return $sql->result(); 
    /* you simply return the results as an object 
    * also note you can use the ActiveRecord class for this...might make it easier 
    */ 
} 

ve sizin bakış: böyle bir şey var, Modelinizdeki şimdi

function make_login 
{ 
    $this->load->model('login_model'); // whatever you call it 

    $data['departments'] = $this->login_model->get_departments(); 

    /* note - you don't need to have the extension when it's a php file */ 
    $this->load->view('siteheader'); 
    $this->load->view('makelogin', $data); 
    $this->load->view('sitefooter'); 
} 

: Denetleyiciniz böyle şey bakacağız

<?php 
    foreach($departments as $store) 
    { 
     echo $store->name . '<br />'; // your fields/whatever you want to output. 
    } 
?> 
+0

numaralı telefon numarası, "login_model" inizde bir yönteme nasıl sahip olmanın artık daha anlamlı bir anlam taşıdığını görüyor musunuz? ne yapacağı bellidir, kolayca uzatabilirsiniz ... 'get_departments' işlevini yeniden parametreye bir ID olarak almak için yeniden yazın, ardından belirli bir departmanı döndürün. Kimlik yok mu? Hepsini iade et. – Ross

+0

Evet, bu mantıklı ... ama bu sorguyu sadece o noktaya kullanacaksam çok daha fazla iş gibi görünüyor ... neden sadece kontrol cihazına koymuyorum? – Bill

+0

Çünkü MVC'nin çalışması ya da daha ziyade konsept olması gerekiyor. Hiçbir şey yapamazsın *. Ama bir gün başka bir işlev veya sorgu eklemeniz gerekiyorsa ne olur? Bu kontrolörde de gidecek mi? MVC'ye girerek çok daha yönetilebilir kodlar oluşturabilirsiniz. – Ross

0
foreach($array as $row) 
    { 
     echo $row['departmentName']; 
    } 
    ?> 

You $ dizi geçmesi gerekiyor ne emin değilim -.> Load-> görünümü() yapar ve gelen parametreleri nasıl ele.

+0

bunu açıklayabilir misiniz lütfen? – benhowdle89

+0

Yayımla güncellendi. Afedersiniz. – iBiryukov

+0

Ne gösterebilirim -> load-> view – iBiryukov

2

SQL sorgusu modelde yapılmalıdır.

Ucuz mnemonik aygıt: modelde D = veritabanı. Kontrolör olarak

, sorgunun sonuçlarına $ veri dizinin bölümünü atamak: in, Şimdi

public function getPosts() 
{ 
    // Method chaining supported in PHP 5 
    $this->db->select('*')->from('posts'); 

    // Assign the query object to a variable 
    $query = $this->db->get(); 

    // We don't want to return an empty result, so let's handle that error somehow 
    if (!$query->num_rows() > 0) { 
     die("There are no posts in the database."); 
    } 

    // Make a new array for the posts 
    $posts = array(); 

    // For the purposes of this example, we'll only return the title 
    foreach ($query->result() as $row) { 
     $posts[$row->id] = $row->title; 
    } 

    // Pass the result back to the controller 
    return $posts; 
} 

:

$this->load->model('blog_model'); 
$data['posts'] = $this->blog_model->getPosts(); 

// Load the view with the data 
$this->load->view('blog', $data); 

Modeli olarak, gerçek sorguyu yapmak görünüm, her bir $ data öğesi kendi değişkeni olacaktır:

<div class="post"> 
    <?php foreach ($posts as $id => $title) : ?> 
     <h1 class="post-title"><?php echo $title; ?> (ID: <?php echo $id; ?>)</h1> 
     <p class="post-content"> 
     ....... 
     </p> 
     <?php endforeach; ?> 
    </div> 

Bu kadar!

+0

Muhtemelen cevabınızı soruyu daha özel bir şekilde yapılandırmalısınız – jondavidjohn

+0

Kopyalama ve yapıştırma hiçbir şey öğrenmenin yolu değildir. Genel bir örnek gönderdim, böylece OP onunla çalışabilir ve aslında kodun ne yaptığını anlayabilir. – Peter

+0

nihayet modelden veri döndürmek için bir çalışma yolu. –

1

O görünüyor ya CI sizi kafa karıştırıyor ya da PHP'ye de yenisiniz. Onlar sadece işlevlerdir, böylece böyle değişkenleri geçemezsiniz.

İlişkilendirilmiş bir diziyi geçirirken, anahtarı alıp, yerel PHP işlevlerini kullanarak dizideki değerle bir değişkene dönüştürür. Ross'un söylediği şey tam olarak ne yapmanız gerektiği.

Modeli: tüm veritabanı şeyler Denetleyici: görünümlere Görünüm değişkenleri geçmek modelleri kullanır: değişkenleri verir

Ayrıca bu sonuca dikkat ve aynı veriye sahip result_array (bir görünüm içinde hiç sql olmaması gerekir) ancak sonuç nesneleri döndürür ve sonuç_dizisi ilişkisel dizileri döndürür.

İlgili konular