自定义SQL语句                                                                            

当提供的API满足不了我们对SQL语句的要求的时候,我们通常是自己来写SQL语句,CI也提供了比较强大了,能够满足我们需求的一般的sql的API。

$res=$this->db->select('id,name')
->from('表名')
->whrer('id >=',5)//注意id后面要有个空格
->limit(3,2)//这里与sql的limit是顺序是反的
->order_by('id desc ')
->get();//翻译成sql语句
var_dump($res->result());
echo $this->db->last_query();//先是最近一条SQL

自定义扩展控制器                                                                          

在application/core中新建MY_Controller.php

class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
//一定呀先调用父类的构造方法
//登录验证、权限验证、其他操作。。。
}
}

同时需要在application/config/config.php中配置一下:

$config['subclass_prefix'] = 'MY_';

自定义扩展模型                                                                            

在application/models中创建user_model.php

class User_model extends CI_Model
{
public function getAll()
{
$res = $this->db->get('表名');
return $res->result();
}
}

在控制器中调用自定义模型

application/controllers:

class User extends MY_Controller
{
public function index()
{
$this->load->model('User_model');//调用以类名为主,而不是文件名
$list = $this->User_model->getAll();//调用模型获取数据
$this->load->view('user/index',array('list'=>$list));//加载视图
}
}

加载模型的时候可以给模型取一个名字:

$this->load->model('User_model','user');//调用以类名为主,而不是文件名
$list = $this->user->getAll();//调用模型获取数据

Url相关函数                                                                             

在表单验证的时候,需要把数据传给控制器,怎么准确的而且可扩展的写action呢,调用API:

public function addView()
{
$this->load->helper('url');//为了不把表单传递的地址写死,用url函数
$this->load->view('user/add');
}

在user/add.php视图当中:

<form action="<?php echo site_url('user/insert'); ?>" method="post">
<!-- ........-->
</form>

如果是index.php目录的话,用:

base_url();

这个API。

同时,每次加载url很麻烦,也可是设置成自动加载,在config/config.php中修改:

$config['helper'] = array('url');

可能在后面的版本中就没有这个自动加载了。

路由                                                                                           

想要把12.html中的.html删了怎么办,这就需要匹配路由规则了(在config/routes.php):

$route['rouxx/showxx/([\d]+)\.html'] = 'rou/show/$1';//插入这句话

分页                                                                                           

  • 必须知道的一些参数

总共有多少条记录

一页要有多少条记录

总共多少页

当前页前后要显示多少个分页链接

  • 设置一些CI分页类基本参数
//总条数
$config['total_rows']
//一页显示几条
$config['per_page']
//定义当前页的前后各有几个数字链接
$config['num_links']
//定义没有分页参数,主URL
$config['base_url']
  • 调用CI的分页类
$this->load->library('pagination');
  • 执行分页方法
$this->pagination->initialize($config);
  • 输出分页链接
echo $this->pagination->create_links();
  • 查询部分数据(limit)
echo $this->db->limit($num,$start);  //从$start查$num条
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Page extends CI_Controller { public function user_add(){
$this->load->model('test_m'); for ($i = 1;$i <= 100;$i++){
$name = 'u'.$i;
$arr = array("usid"=>$i,"uname"=>$name,"upass"=>123456);
$this->test_m->user_insert($arr); }
} public function pagelist(){
$this->load->model('test_m');
$user = $this->test_m->user_select_all();
$allnum = count($user);
$pagenum = 20; $config['total_rows'] = $allnum;
$config['per_page'] = $pagenum;
$config['num_links'] = 3;
$config['base_url'] = "/CI/index.php/page/pagelist";
$config['use_page_numbers'] = true; $this->load->library('pagination');
$this->pagination->initialize($config); var_dump($this->pagination->create_links());
echo $this->pagination->create_links(); echo "<br />";
$id = $this->uri->segment(3); //获得url第三段字符
$id =$id ? $id:1;
$start = ($id - 1) * $pagenum;
$list = $this->test_m->user_select_limit($start,$pagenum);
var_dump($list);
}
}

上传文件                                                                                    

视图 /views/up.php:

<html>
<form action="ci/CodeIgniter_2.2.0/index.php/upload/up" method="post" enctype="multipart/form-data">
<input type="file" name="upfile" />
<input type="submit" name="sub" value="提交" />
</form>
</html>

控制器:

  • 定义一个数组,设置一些与上传相关的参数
$config['upload_path'] = './uploads/';
//设置允许上传的类型
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
//如果是图片还可以设置最大高度和宽度
$config['max_height'] = 768;
$config['max_width'] = 1024;

还可以设置其他的一些额外参数,详细看用户手册。

  • 调用CI的上传通用类,并执行上传
//upload为调用的类名,全小写
$this->load->library('upload',$config);
//如果上传框的name写的是userfile,那就不用传参数了,如果不是,把name的值传进去
$this->upload->do_upload('上传框的name');
  • 接收出错信息或成功信息
//出错信息
$error = array('error' => $this->upload->display_error());
//成功信息
$data = array('upload_data' => $this->upload->data());
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Upload extends CI_Controller {
//显示带表单的视图
public function index(){
$this->load->view('up');
}
//显示上传信息
public function up(){
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = "2000";
$this->load->library('upload',$config);
//打印成功或错误的信息
if($this->upload->do_upload('upfile'))
{
$data = array("upload_data" => $this->upload->data());
var_dump($data);
}
else
{
$error = array("error" => $this->upload->display_errors());
var_dump($error);
}
}
}

Session                                                                                   

利用CI类实现session登录

  • 修改配置文件(config.php)
//生成一个随机不重复的字符串走位加密的key保存到config.php的encryption_key中
$config['encryption_key']='adb8bf6d0ac4e17b42a80941582497a4';
  • 加载SESSION类
$this->load->library('session');
  • 创建SESSION
$array = array('id'=>3,'name'=>'jack');
$this->session->set_userdata($array);
  • 查看SESSION
$this->session->userdata(session名);
  • 删除SESSION
$this->session->unset_userdata('SESSION名');

在config.php文件中修改一下配置,便可以对cookie加密:

$config['sess_cookie_name']        = 'ci_session';

$config['sess_expiration']        = 7200;

$config['sess_expire_on_close']    = FALSE;

$config['sess_encrypt_cookie']    = TRUE

$config['sess_use_database']       = FALSE;

$config['sess_table_name']        = 'ci_sessions';

$config['sess_match_ip']        = FALSE;

$config['sess_match_useragent']    = TRUE;

$config['sess_time_to_update']    = 300;
  • 一次性数据,只能读取一次
//设置
$this->session->set_flashdata('test','aaaaa');
//读取
$test = $this->session->flashdata('test');

ci框架(二)的更多相关文章

  1. 初学后台框架总结篇二——快速了解CI框架

    一.下载CI框架并安装,这里放置一张自己的项目目录结构图 目录框架搭建好之后开始将自己的项目与框架融合 二.更改相关配置 1.用任何文本编辑器打开 application/config/config. ...

  2. 二十七、CI框架之自己写分页类并加载(写分页还是有难度,搞了一整天)

    一.我们写好自己的分页代码,防止library目录中,带构造函数 二.在模型中,添加2个函数,一个是查询数据的条数,第二个是取出数据库中的数据 三.在控制中,写入相应的代码,如下: 四.在界面中,写入 ...

  3. CI框架浅析(二)

    该文延续上篇文章: CI框架浅析(一) 在CI框架的核心库中,CodeIgniter.php负责加载所有需要的类库,第一个加载的是公共库 core/Common.php Common.php 负责加载 ...

  4. PHP CI 框架简单使用(二)

    我们简单认识一下CI框架的MVC.示例代码如下 //CI控制器文件Home.php <?php defined('BASEPATH') OR exit('No direct script acc ...

  5. 第一天ci框架开发商城1

    ci框架开发商城1 1/28/2016 9:43:52 PM userguide删除 system application controllers 控制器 models 模型 views 视图 模板 ...

  6. CI框架,源代码一次性判断获取post(get)数据是否有某个字段值为空方法

    一.以下是CI框架 1.把所有的要接收的字段放在数组中 例: 我要接收:id,name,age,mobile 等字段 $req = array('id','name','age','mobile'); ...

  7. CI框架笔记

    @update 2016-4-2 13:45:35 一.目录结构 ci_demo ├─myapp 应用主目录 │ ├─autoload.php 自定义的自动加载文件(可选) │ ├─myapp.php ...

  8. 各种demo——CI框架学习

    各种demo——CI框架学习   寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controlle ...

  9. 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的

    [军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的   之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...

  10. **【ci框架】精通CodeIgniter框架

    http://blog.csdn.net/yanhui_wei/article/details/25803945 一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架 ...

随机推荐

  1. 【hdoj_2079】选课时间(母函数)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2079 此题采用母函数的知识求解,套用母函数模板即可: http://blog.csdn.net/ten_s ...

  2. CentOS7.3安装electronic-wechat

    方法一.简单粗暴 1.到https://github.com/geeeeeeeeek/electronic-wechat/找到最新的安装包linux-x64.tar.gz 2.解压tar -zxvf ...

  3. SonarQube Scanner for MSBuild

    到现在为止,已经将sonarQube服务器搭建好,服务器是Linux服务器,基于sonarQube6.1配置的 原理关于sonarQube的工作原理,暂时还不是太清楚,据同事的分析,是在本机调用服务器 ...

  4. Python WindowsError

    WindowsError: [Error 2] The system cannot find the file specified WindowsError: [Error 3] The system ...

  5. 114. Flatten Binary Tree to Linked List【Medium】【将给定的二叉树转化为“只有右孩子节点”的链表(树)】

    Given a binary tree, flatten it to a linked list in-place. For example, given the following tree: 1 ...

  6. CF1025B Weakened Common Divisor【数论/GCD/思维】

    #include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include ...

  7. 洛谷P1197 [JSOI2008] 星球大战 [并查集]

    题目传送门 星球大战 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这 ...

  8. Flask实战第43天:把图片验证码和短信验证码保存到memcached中

    前面我们已经获取到图片验证码和短信验证码,但是我们还没有把它们保存起来.同样的,我们和之前的邮箱验证码一样,保存到memcached中 编辑commom.vews.py .. from utils i ...

  9. HashMap 不能并发

    问题的症状 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题.后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现 ...

  10. python基础之带参数装饰器和迭代器

    带参数的装饰器:就是在原装饰器外再包一层函数 def auth(driver='file'): def auth2(func): def wrapper(*args,**kwargs): name=i ...