【问题标题】:Codeigniter: model foreach pass array to controller -> to viewCodeigniter:模型 foreach 将数组传递给控制器​​ -> 以查看
【发布时间】:2014-09-15 09:36:12
【问题描述】:

这是我的模型 - 我想分配行并在视图页面上回显,例如

我的模特:

public function dsduan(){

       $data   =   array();
       $q = $this->db->query("SELECT duan.id, duan.tenduan, duan.diachi, quan.quan, duan.tdt, duan.mdxd, duan.tt, duan.cdt, duan.dvql, duan.dvtk, duan.dvtc, duan.dvgs, duan.loai, duan.tienich, duan.noidung, duan.hinhanh FROM duan LEFT JOIN quan ON duan.quan=quan.id ORDER BY duan.tenduan ASC");

        if ($q->num_rows == 1)
        { 
            foreach ($q->result() as $row)
            {                  
                $data[]['id'] = $row->id; 
                $data[]['tenduan'] = $row->tenduan;
                $data[]['diachi'] = $row->diachi;
                $data[]['quan'] = $row->quan;                   
            }
        }

        return $data; 
}


我的控制者:

public function dsduan() {

     $this->load->model('madmin');
     $duan = $this->madmin->dsduan();
     $this->load->view('danhsachduan', $duan);        
}


我的观点:

<td><?php echo $id; ?></td>
<td><?php echo $tenduan; ?></td>
<td><?php echo $diachi; ?></td>
<td><?php echo $quan; ?></td>

如何正确地将模型数组传递给控制器​​,以便在视图中回显? 我的观点错误:

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: id

Filename: views/danhsachduan.php

Line Number: 44

【问题讨论】:

  • 发布print_r($duan);的结果
  • 添加 print_r($duan);到我的控制器。结果:数组 ( )
  • 这不是模型函数的编写方式。请在下面查看我的答案。
  • num_rows 将返回结果行的count,而不是boolean 所以,请使用if ($q-&gt;num_rows &gt; 0);,记住你是从模型返回数组到控制器,所以你不能直接将它打印为$身份证。
  • @ParagTyagi 这不是给你的。

标签: php arrays codeigniter


【解决方案1】:

在您的模型中,您使用二维数组:

$data[]['id'] = $row->id;

然后在您的控制器中将此数组传递给视图。

所以如果你想在视图中访问二维数组,你必须使用 foreach 循环。

例如更改模型中的数组,如下所示:

$data['id'][] = $row->id;

并在您的视图访问数组中使用:

foreach($id as $res)
{
   echo $res;
}

【讨论】:

  • 结果:遇到 PHP 错误严重性:通知消息:未定义变量:id 文件名:views/danhsachduan.php 行号:46 遇到 PHP 错误严重性:警告消息:为 foreach 提供的参数无效() 文件名:views/danhsachduan.php 行号:46..
  • 控制器中 print_r($duan) 的结果是什么?
  • Array ( [0] => stdClass Object ( [id] => 2 [tenduan] => 1 [diachi] => 1 [quan] => Quáºn 1 [tdt] => 1 [ mdxd] => 1 [tt] => 1 [cdt] => 1 [dvql] => 1 [dvtk] => 1 [dvtc] => 1 [dvgs] => 1 [loai] => 1 [tienich] => 1 [noidung] => 1 [hinhanh] => 标志 -1.jpg )
  • ok..现在在你的视图中试试这一行:echo $id or echo $duan['id'] or print_r($id)
【解决方案2】:

像这样更新你的视图

<?php foreach($duan as $d) { ?>
    <td><?php echo $d['id']; ?></td>
    <td><?php echo $d['tenduan']; ?></td>
    <td><?php echo $d['diachi']; ?></td>
    <td><?php echo $d['quan']; ?></td>
<?php } ?>

【讨论】:

    【解决方案3】:
    public function dsduan(){
    
       $data   =   array();
       $q = $this->db->query("SELECT duan.id, duan.tenduan, duan.diachi, quan.quan, duan.tdt, duan.mdxd, duan.tt, duan.cdt, duan.dvql, duan.dvtk, duan.dvtc, duan.dvgs, duan.loai, duan.tienich, duan.noidung, duan.hinhanh FROM duan LEFT JOIN quan ON duan.quan=quan.id ORDER BY duan.tenduan ASC");
    
        if ($q->num_rows == 1)
        { 
            foreach ($q->result() as $row)
            {                  
                $data['id'] = $row->id; 
                $data['tenduan'] = $row->tenduan;
                $data['diachi'] = $row->diachi;
                $data['quan'] = $row->quan;                   
            }
        }
    
        return $data; 
    }
    

    【讨论】:

      【解决方案4】:

      在codeigniter中,它在将变量从控制器绑定到视图时使用extract()方法。在这种情况下,您可以这样做。

      在模型中

      public function dsduan()
      {
      
             $data   =   array();
             $q = $this->db->query("SELECT duan.id, duan.tenduan, duan.diachi, quan.quan, duan.tdt, duan.mdxd, duan.tt, duan.cdt, duan.dvql, duan.dvtk, duan.dvtc, duan.dvgs, duan.loai, duan.tienich, duan.noidung, duan.hinhanh FROM duan LEFT JOIN quan ON duan.quan=quan.id ORDER BY duan.tenduan ASC");
      
             if ($q->num_rows)
             {
                  $data = $q->result_array();
             }
      
              return $data; 
      }
      

      在控制器中

      public function dsduan()
      {
              $this->load->model('madmin');
              $data['duan'] = $this->madmin->dsduan();
              $this->load->view('danhsachduan', $data);
      
      }
      

      在视图中,如果你的数组是多维的,可以这样使用,

      <?php foreach($duan as $d) { ?>
         <td><?php echo $d['id']; ?></td>
         <td><?php echo $d['tenduan']; ?></td>
         <td><?php echo $d['diachi']; ?></td>
         <td><?php echo $d['quan']; ?></td>
      <?php } ?>
      

      如果你的数组是一维的,你可以这样使用,

         <td><?php echo $duan['id']; ?></td>
         <td><?php echo $duan['tenduan']; ?></td>
         <td><?php echo $duan['diachi']; ?></td>
         <td><?php echo $duan['quan']; ?></td>
      

      【讨论】:

        【解决方案5】:

        修改您的代码。请用您的代码替换下面。

        型号:

        public function dsduan()
        {
             $q = $this->db->query("SELECT duan.id, duan.tenduan, duan.diachi, quan.quan, duan.tdt, duan.mdxd, duan.tt, duan.cdt, duan.dvql, duan.dvtk, duan.dvtc, duan.dvgs, duan.loai, duan.tienich, duan.noidung, duan.hinhanh FROM duan LEFT JOIN quan ON duan.quan=quan.id ORDER BY duan.tenduan ASC");
        
             if($q->num_rows() > 0)
                 return $q->result();
             return false;
        }
        


        控制器:

        public function dsduan() 
        {    
             $this->load->model('madmin');
             $data['duan'] = $this->madmin->dsduan();
             $this->load->view('danhsachduan', $data);        
        }
        


        查看

        <?php foreach($duan as $d) { ?>
            <td><?php echo $d->id; ?></td>
            <td><?php echo $d->tenduan; ?></td>
            <td><?php echo $d->diachi; ?></td>
            <td><?php echo $d->quan; ?></td>
        <?php } ?>
        

        【讨论】:

        • 我已经替换了。这个结果我的观点:遇到了 PHP 错误 严重性:通知消息:尝试获取非对象文件名的属性:views/danhsachduan.php 行号:44
        • 嗨,我使用了库github.com/stvnthomas/CodeIgniter-Multi-Upload。我不知道如何将图像名称存储到我的 sql 中。你能帮帮我吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多