xiaoniao 发表于 2009-8-29 01:34:47

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

本帖最后由 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时间戳插入数据的。
这句话是来格式化时间并显示它。

heraldic 发表于 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();
    }

xiaoniao 发表于 2009-10-22 11:22:33

回复 2# heraldic


    不是必须的,那个加载数据库的,写的不怎么规范。

heraldic 发表于 2009-10-22 11:30:05

本帖最后由 heraldic 于 2009-10-22 11:32 编辑

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

再加1个问题:

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

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


补充下自己刚查到的资料:原来PHP对函数大小写不敏感,对变量确实大小写敏感的,这样我第2个问题就有答案了

xiaoniao 发表于 2009-10-25 10:14:24

getNewsModel就是指控制器的名字你需要调用那个model里面的方法的时候,就是$this->modelname->methodname() 这样来调用的

deppr 发表于 2011-11-16 10:36:31

如果将增删改查的控制器写在一个文件中的时候,网站的第一个加载页面显示出来的是显示(查询)页面,请问,如何在view的显示页面中加载controller中的控制器中的相应的方法呢?{:soso_e132:}

deppr 发表于 2012-3-5 10:02:21

请问如果不用view而是用smarty,请问,怎么显示呢?{:1_1:}

1909264228 发表于 2013-9-25 10:57:45

记住这个顺序   
1)首先在model层获取一个表的数据。
2)然后在controller层中处理数据,并将数据给view层
3)最后views层显示数据
页: [1]
查看完整版本: ci数据库操作实例篇(二)——显示数据 一步一步跟着学