用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6779|回复: 7
收起左侧

ci数据库操作实例篇(二)——显示数据 一步一步跟着学

[复制链接]
发表于 2009-8-29 01:34:47 | 显示全部楼层 |阅读模式
本帖最后由 xiaoniao 于 2009-8-29 14:51 编辑

转载自:http://www.phpall.cn/forum/read.php?tid=31
本教程由PHPall发布,希望大家提出宝贵的意见,我们好完善与改正。

PHPall技术交流群① 75345798

附件中有所有的源代码,可以下载。  
  我这里默认大家都会配置ci,如果不会的朋友们,请看http://www.phpall.cn/forum/中的"codeigniter教程发布"栏目.
  我这里先新建一个数据库 名为:ci_example 编码选择utf8,本教程的所有编码均为utf8,请大家讲数据库编码、php文件编码、ci默认编码全部设置为urt8编码。然后新建一个表,名为news。建表的sql文件我已经导出。在下面可以下载。大家建好ci_example数据库以后,导入表的sql文件即可。
  现在来到编码部分。

首先在model层获取一个新闻表的数据。
新建getNewsModel.php文件,
代码如下:


  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • <html xmlns="http://www.w3.org/1999/xhtml">
  • <head>
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • <title>无标题文档</title>
  • </head>
  • <body>
  • <?php
  • class GetNewsModel extends Model{
  •    function getNewsModel(){
  •      parent::Model();
  •      $this->load->database();
  •     }
  •    function getNews(){
  •      $data=$this->db->get('news');
  •      return $data;
  •     }
  •   }
  • ?>
  • </body>
  • </html>
然后在controller层中处理数据,并将数据给view层。
新建get.php。代码如下:
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • <html xmlns="http://www.w3.org/1999/xhtml">
  • <head>
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • <title>无标题文档</title>
  • </head>
  • <body>
  • <?php
  • class Get extends Controller{
  •    function get(){
  •      parent::Controller();
  •      $this->load->database();
  •     }
  •    function getNews(){
  •      $this->load->model('getNewsModel');
  •      $data['query']=$this->getNewsModel->getNews();
  •      $this->load->view('viewNews',$data);
  •     }
  •   }
  • ?>
  • </body>
  • </html>
$data['query']=$this->getNewsModel->getNews()这一句是将查询的结果
放入数组中,然后将这个数组传入views层

最后views层。
新建viewNews.php文件。
代码如下:

  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • <html xmlns="http://www.w3.org/1999/xhtml">
  • <head>
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • <title>无标题文档</title>
  • </head>
  • <body>
  • <table>
  • <?php
  • foreach($query->result() as $row) : ?>
  •     <tr>
  •     <td>
  • <?php echo $row->title; ?>
  •     </td>
  •     <td><?php echo $row->content; ?></td>
  •     <td><?php echo date("y-m-d h:i:s",$row->time);?> </td>
  •     </tr>
  • <?php endforeach;?>
  •     </table>
  • </body>
  • </html>
其中$query来自controller中传过来的数组,result()函数是用
来取得结果集的,以对象数组的形式返回的。这个可以查ci手册。
foreach循环将所有数据取出来。
然后echo $row->title将对象集的索引为title的数据取出来。这
里需要使用->   因为$row是一个对象数组所以要用->来取其中的
数据。
date("y-m-d h:i:s",$row->time)这里来说明一下。
数据库中的time是以插入新闻的unix时间戳插入数据的。
这句话是来格式化时间并显示它。

ci_example.rar

359.57 KB, 下载次数: 105

发表于 2009-10-22 11:09:41 | 显示全部楼层
请教几个问题:

1、model、control中都有load->database,是否必须?
我做过这样的试验:
单独删除model或者control中的这个“构造函数”,也就是说load->database只调用一次----注意必须要调用一次----整个程序是运行正常的;当然同时删除就会报出那个db不存在的错误的;


2、GetNewsModel类中这个函数getNewsModel是做什么用的?
Get(control)类中的get函数也是做什么用处的?
我的理解:是否就是类似构造函数?
这两个“构造函数”的名字大小写有什么规定吗?我试过改变大小写,程序运行没有问题的,但是改名之后就不行了。

   function getNewsModel(){
     parent::Model();
     $this->load->database();
    }
 楼主| 发表于 2009-10-22 11:22:33 | 显示全部楼层
回复 2# heraldic


    不是必须的,那个加载数据库的,写的不怎么规范。
发表于 2009-10-22 11:30:05 | 显示全部楼层
本帖最后由 heraldic 于 2009-10-22 11:32 编辑

多谢xiaoniao这么快就来解答:)

再加1个问题:

control类中:
$data['query']=$this->getNewsModel->getNews();

这句话中getNews应该是model中的method名称,那红色部分的getNewsModel是从何而来?是model的类名?我试验过改名,会报错的。


补充下自己刚查到的资料:原来PHP对函数大小写不敏感,对变量确实大小写敏感的,这样我第2个问题就有答案了
 楼主| 发表于 2009-10-25 10:14:24 | 显示全部楼层
getNewsModel就是指控制器的名字你需要调用那个model里面的方法的时候,就是$this->modelname->methodname() 这样来调用的
发表于 2011-11-16 10:36:31 | 显示全部楼层
如果将增删改查的控制器写在一个文件中的时候,网站的第一个加载页面显示出来的是显示(查询)页面,请问,如何在view的显示页面中加载controller中的控制器中的相应的方法呢?{:soso_e132:}
发表于 2012-3-5 10:02:21 | 显示全部楼层
请问如果不用view而是用smarty,请问,怎么显示呢?
发表于 2013-9-25 10:57:45 | 显示全部楼层
记住这个顺序   
1)首先在model层获取一个表的数据。
2)然后在controller层中处理数据,并将数据给view层
3)最后views层显示数据

本版积分规则