【问题标题】:Cant pass database results to my view in Codeigniter无法将数据库结果传递给我在 Codeigniter 中的视图
【发布时间】:2016-06-03 10:08:18
【问题描述】:

我正在学习 Codeigniter,我想在我的视图中将数据库中的数据显示到数据表中。

我不知道该怎么做,我试图将数据库中的数据显示到视图中的表中(使用数据表)。

这是我的模型:

function get_all_tagihan(){
        return $this->db->query("
            SELECT * FROM tagihan
            WHERE tagihan.TAGIHAN_ISDELETED=0
            ORDER BY tagihan.TAGIHAN_ID;
        ");
    }

这是我的控制器:

public function gettagihan(){

        $this->load->model('model_tagihan');
        $res=$this->model_tagihan->get_all_tagihan();
        $data_tagihan['tagihan']=$res;
        $this->load->view('monitoring/kosong', $data_tagihan);

    }

这是我的观点:

<table id="table1" class="table striped hovered cell-hovered border bordered" width="100%">
        <thead>
        <tr valign="middle">
            <td><b>Tarif</b></td>
            <td><b>No. Meter Panel</b></td>
            <td><b>Periode</b></td>
            <td><b>Nama</b></td>
            <td><b>Alamat</b></td>
            <td><b>Unitup</b></td>
            <td><b>Jenis Tarif</b></td>
            <td><b>Daya</b></td>
            <td><b>Nominal PLN</b></td>
            <td><b>Batas Atas</b></td>
            <td><b>Hasil Audit</b></td>
        </tr>
        </thead>



        <?php
        echo"<tbody>";
        if (isset($data_tagihan)){
        foreach ($tagihan as $key) {
            echo"<tr><td>".$key->TARIF_ID."</td>";
            echo"<td>".$key->PANEL_ID."</td>";
            echo"<td>".$key->TAGIHAN_PERIODE."</td>";
            echo"<td>".$key->TAGIHAN_NAMA."</td>";
            echo"<td>".$key->TAGIHAN_ALAMAT."</td>";
            echo"<td>".$key->TAGIHAN_UNITUP."</td>";
            echo"<td>".$key->TAGIHAN_JENISTARIF."</td>";
            echo"<td>".$key->TAGIHAN_DAYA."</td>";
            echo"<td>".$key->TAGIHAN_NOMINALPLN."</td>";
            echo"<td>".$key->TAGIHAN_BATASATAS."</td>";
            echo"<td>".$key->HASILAUDIT_ID."</td></tr>";
        }
        }
        ?>
        </tbody>
    </table>

显示数据表,没有显示错误,但为什么一直说“表中没有可用数据”?我的数据库中已经有一些数据。

我不知道。你们对我应该做什么有什么建议吗?感谢您的帮助!

【问题讨论】:

    标签: php mysql codeigniter datatable


    【解决方案1】:

    您在构建查询后忘记使用result()。请记住,这应该在您的模型方法中,因为$q-&gt;result() 是您的数据层的一部分:

    public function get_all_tagihan(){
        $q = $this->db->query("
                    SELECT * FROM tagihan
                    WHERE tagihan.TAGIHAN_ISDELETED=0
                    ORDER BY tagihan.TAGIHAN_ID;
                ");
        return $q->result();
    }
    

    来源:Generating Query Results in Codeigniter 3

    更新:

    你的观点也有问题(正如@blacmoon 提到的):

    每次您向视图发送数据时,您都会通过控制器分配一个数组并将其传递给视图。执行此操作时,会将所有数组元素作为变量发送到视图。换句话说,只有数组的元素在你的视图中被转换成变量,数组的实际名称永远不会被传递。例如:

    如果你的控制器是这样的:

    function test()
    {
        $data = array(
            "parent_name" => "John",
            "parent_age" => 52,
            "children" => array(
                array(
                    "name" => "Jane",
                    "age" => 22,
                )
            )
        );
        $this->load->view('test', $data);
    }
    

    您的视图将只接收以下变量:

    $parent_name = "John";
    $parent_age = 52;
    $parent_children = array(
        array(
            "name" => "Jane",
            "age" => 22,
        )
    );
    

    如您所见,变量$data 从未传递,因此视图中不存在。

    在您的情况下,您以这种方式设置数组$data_tagihan

    $res = $this->model_tagihan->get_all_tagihan();
    $data_tagihan['tagihan'] = $res;
    $this->load->view('monitoring/kosong', $data_tagihan);
    

    然后像这样在你的视图中检查它:

     if (isset($data_tagihan)){
    

    这是错误的,因为$data_tagihan 永远不会存在。但是$tagihan 确实存在。因此你的条件应该是这样的:

     //empty() is best used because it checks if its set, and if it has contents
     if (!empty($tagihan)){
    

    希望这会有所帮助。

    【讨论】:

    • in view: 改变这个 if (isset($data_tagihan)){ -- > if(!empty($tagihan)){
    • 天啊,真的很有帮助!谢谢任何人! :D
    【解决方案2】:

    在你的模型中......

    function get_all_tagihan()
    {
        return $this->db->query("SELECT * FROM tagihan WHERE tagihan.TAGIHAN_ISDELETED = 0 ORDER BY tagihan.TAGIHAN_ID;")->result();
    }
    

    终于看到了……

    if (count($tagihan) > 0 )
    {
        foreach ($tagihan as $key) 
        {
            echo"<tr><td>".$key->TARIF_ID."</td>";
            echo"<td>".$key->PANEL_ID."</td>";
            echo"<td>".$key->TAGIHAN_PERIODE."</td>";
            echo"<td>".$key->TAGIHAN_NAMA."</td>";
            echo"<td>".$key->TAGIHAN_ALAMAT."</td>";
            echo"<td>".$key->TAGIHAN_UNITUP."</td>";
            echo"<td>".$key->TAGIHAN_JENISTARIF."</td>";
            echo"<td>".$key->TAGIHAN_DAYA."</td>";
            echo"<td>".$key->TAGIHAN_NOMINALPLN."</td>";
            echo"<td>".$key->TAGIHAN_BATASATAS."</td>";
            echo"<td>".$key->HASILAUDIT_ID."</td></tr>";
        }
    }
    else
    {
        echo "no data in table";
    }
    

    【讨论】:

    • 尽管这样可行,但这是错误的,因为 result() 应该放在模型中,因为它是数据层。通过这种方式,你打破了 MVC 结构。
    • 我打算编辑它,但忘了谢谢你提醒我... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多