ci 基础知识

//建立虚拟主机

2、下载完毕后,解压,并将其复制粘贴到程序的主目录(d:/wamp/xmall/),然后再将其重命名为"myshop",那么"myshop" 就作为ci项目名称存在了

3、为我们的ci项目搭建一个虚拟主机:

首先,找到httpd.conf配置文件,开启虚拟主机的配置

然后,找到httpd-vhosts.conf配置文件,进行虚拟主机的配置

最后,找到hosts配置文件,为我们的ci项目添加dns映射

4、在浏览器中输入 http://www.myshop.com/index.php 回车,如能看到如下欢迎界面,则表示我们的ci项目安装成功了

 

 

1 建立控制器的时候是外小内大
也就是:注意书写习惯,2 注意加载视图的时候的数组参数

blog.php (控制器名称)
class Blog extends CI_Controller{

//调用视图,注意:视图必须用php结尾,并且如果有数据传入,视图只能识别出数组的名字$title,不能识别$data['title'];
$this->load->view('blogview','$data');
}
不能以_开头,这是私有方法


视图:
1 如果在控制器中加载了视图,那么直接写控制器的加载方法:
$this->load->view(视图); //注意:视图直接写名字不带后缀,如果是在文件夹下,那么应该是
$this->load->vlew(文件夹/视图);
视图可以多次加载,例如头部和尾部分开
2 视图中直接使用php原生代码
3 给视图分配变量
$list =array(
array('id'=>1,'name'=>'jack','email'=>'jack@163.com'),
array('id'=>2,'name'=>'lili','email'=>'lili@163.com'),
array('id'=>3,'name'=>'lucy','email'=>'lucy@163.com'),
);
$data['title']='数组标题';
$data['list']=$list;
$this->load->vars($data);
4 推荐使用 ,包括if ,if else 等等,因为这是模板专用写法
<?php foreach($list as $item) : ?>
<?=$item['name']?>
<?php endforeach?>


$this->load->vars('key','value');
<?php
class User extends CI_Controller
{
public function index()
{
//给视图分配变量
$this->load->vars('title','这是标题');
//加载视图
$this->load->view('user/index');
}
}
?>

建立文件夹user/index的源代码
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="Description" content="">
<title>Document</title>
</head>
<body>
<?php
echo '这是user文件夹下面的文件';
echo "<br/>";
echo $title;
?>
</body>
</html>


注意:要先传递数组,再进行页面的渲染
1 控制器的写法 思路:设置变量,分配变量,加载视图
<?php
class User extends CI_Controller {

public function index()
{
//给视图分配变量
//$this->load->vars('title','这是标题');
//加载视图
$list =array(
array('id'=>1,'name'=>'jack','email'=>'jack@163.com'),
array('id'=>2,'name'=>'lili','email'=>'lili@163.com'),
array('id'=>3,'name'=>'lucy','email'=>'lucy@163.com'),
);
$data['title']='数组标题';
$data['list']=$list;
$this->load->vars($data);
$this->load->view('user/index');
}


}
?>

2 视图文件写法 思路:获取变量,用foreach循环出来
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="Description" content="">
<title>Document</title>
</head>
<body>
<?php
echo '这是user文件夹下面的数据';
echo "<br/>";
echo $title;
?>
<table border="1">
<tr>
<td>编号</td>
<td>姓名</td>
<td>邮件</td>
</tr>
<?php foreach ($list as $item): ?>
<tr>
<td><?=$item['id']?></td> // 注意:等价于<?php echo item['id']?>
<td><?=$item['name']?></td>
<td><?=$item['email']?></td>
</tr>
<?php endforeach;?>
</table>
</body>
</html>



CI的超级对象(controller 对象)
也就是当前的控制器对象$this
打印下 var_dump($this)

$this->load (装载器)
打印下属性var_dump($this->load) \system\core
文件在库文件core下面可以查看,CI会自动实例化一个Loader对象,来放在超级对象中
$this->load,就是装载器类,实际上例如$this->load->view()
相当于 $obj=new CI_Loader();
$this->load=$this
$this->load->view()等价于new CI_Loader()->view();

$this->load提供的方法包括:
view()方法 装载视图
vars()方法 分配变量到视图
database() 装载数据库操作对象
model() 装载模型对象
helper() 加载帮助对象

$this->uri (URL解析相关的对象) \system\core
提供的方法包括:
1 首先传统的get传参数方式是怎样的
http://localhost/ci/index.php/welcome?id=5
然后echo $_GET['id'],那么就输出了5

2 现在是pathinfo模式,那么如何获取到id?
http://localhost/ci/index.php/welcome/index/id/1
那么就是用uri
$this->uri->segment(3);
那么获取到的就是id


$this->input
提供方法:
$this->input->post('username'); 获取到post过来的数据 $_POST['username'],为什么用这个,因为比较安全
$this->input->server('REMOT_ADDR'); 获取IP地址 $_SERVER['REMOTE_ADDR']
$this->input->server('DOCUMENT_ROOT'); 获取根目录信息 $_SERVER['DOCUMENT_ROOT']

注意:在视图中,也可以直接使用$this来获取超级对象



数据库访问
1 修改配置文件 application\config\database.php,里面默认是default


1 装载数据库操作类
2 开始使用数据库操作类
3 执行数据库语句获得结果集类
4 执行结果集类方法返回结果


显示:
public function showusers() //包含两步:1 获取数据 2 传递给视图
{


//装载数据库操作类,因为不是必要的,所以是有选择地装载!
$this->load->database(); //如果你想操作多个数据库,那么就选择$this->load->database('另一个数据库');
//显示这个操作类,装载成功后,会放入超级对象的属性中,默认属性名是db
//var_dump($this->db);
$sql='select * from xqcx ';
$res = $this->db->query($sql); //返回对象
//var_dump($res);
$result=$res->result(); //返回数据
//var_dump($result); //打印数据


//把数据传递到视图中去
$data['list']=$result;
%this->load->view('user/index',$data);


}

增加/删除/修改/查询: 使用最常见的query方法
public function add(){
$this->load->database();
$sql="insert into xqcx(ssxq, xqname) values('我的小区','测试小区')";
$bool=$this->db->query($sql);
if($bool)
{
echo '受影响行数'.$this->db->affected_rows();
echo '自增id'.$this->db->insert_id();
}
}

public function update(){
$data[0]=$this->input->post['name'];
$data[1]=$this->input->post['password'];
$sql="update xqcx(ssxq,xqname) values(?,?)";
$bool=$this->db->query($sql,$data);
if($bool)
{
echo '受影响行数'.$this->db->affected_rows();
echo '自增id'.$this->db->insert_id();
}
}




注意:如果每次都加载数据库 $this->load->database(); 很麻烦的话,那么就去配置文件里面修改
application\config 下面的antoload.php里面
$autoload['libraries'] = array('database');


AR模型
AR模型的引入是为了简化对基础数据库的操作,开启AR模型是指
//$autoload['libraries'] = array('database'); 先开启自动加载数据库
//active_group=true; 默认状态下是开启AR模型的


//1 查询
public function get(){
$query = $this->db->get('xqcx'); //返回结果集对象
foreach ($query->result() as $item){
echo $item->ssxq;
echo '<br>';
//echo $item->xqname;
}
}

//插入
public function insert()
{
$data=array('ssxq'=>'测试小区1','xqname'=>'小区名称');
$bool=$this->db->insert('xqcx',$data);
if($bool)
{
echo '插入成功!';
}else
{
echo '插入失败!';
}
}


//更新第334行的数据
public function update()
{
$data=array('ssxq'=>'测试小区2','xqname'=>'小区名称');
$bool=$this->db->update('xqcx',$data,array('id'=>334));;
if($bool)
{
echo '更新成功!';
}else
{
echo '更新失败!';
}
}

//删除
public function delete(){
$bool=$this->db->delete('xqcx',array('id'=>334));
if($bool)
{
echo '删除成功!';
}else
{
echo '删除失败!';
}
}


AR中的连贯操作,所谓的连贯操作,就是指应对复杂的SQL语句
public function ar(){
$query =$this->db->select('ssxq,xqname')
->from('xqcx')
->where('id >=',3)
->limit(2,3)
->order_by('id desc')
->get();
var_dump($query->result());
}


//注意:这个>号前面一定要有空格
//->limit(2,3) ,跳过3条取2条
//为了便于比较,我们查看下最后的一条查询语句
//结果是 SELECT `ssxq`, `xqname` FROM (`xqcx`) WHERE `id` >= 3 ORDER BY `id` desc LIMIT 3, 2
//echo $this->db->last_query();


CI控制器的扩展
有什么作用:例如,做登录验证
\www\ci\application\core 在这个下面写上自己的控制器基类
自定义一个控制器,放在\www\ci\application\core 目录下,名字叫做MY_Controller
<?php
class MY_Controller extends CI_Controller()
{
function __construct()
{
parent::__construct();
echo '测试控制器1';

//登录验证
//权限验证
}
}
?>


然后在Controllers 文件夹下面新建一个newwelcome类来继承我自己写的控制器,注意:开头都以MY_开头

<?php
class Newwelcome extends MY_Controller{
public function index()
{
echo '123';
}
}
?>


模型
1 新建一个user模型,名字为uer_model.php 内部类的命名方法为User_Model ,注意:一定要小写
2 CI Model类的方法其实相当简单,主要是用来规范我们的项目开发
1 构造方法
2 可以引用超级对象$this->里面的所有的类的方法
3 以后所有的$this->db方法都写在里面

完整的MVC方式怎么写?

1 创建模型
<?php
class User_Model extends CI_Model {

public function getAll()
{
$query=$this->db->get('xqcx');
return $query->result();
}
}
?>





2 控制器中加载模型

<?php
class User extends CI_Controller {

public function index()
{
//1 加载模型
$this->load->model('User_Model');
//2 调用模型中的方法获取数据
$list=$this->User_Model->getAll();
//3 传递关联数组给视图
$this->load->view('user/usertest',array('list'=>$list));
}
?>


注意:也可以给模型起别名,那么User_Model 就被叫做user了
$this->load->modle('User_Model','user');
$this->user->getAll();

3 视图显示

<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="Description" content="">
<title>Document</title>
</head>
<body>
<?php
var_dump($list);
?>
</body>
</html>



CI中有关URl的函数
有时候URL不能写死,那么怎么办,通过系统提供的URL相关函数来进行
快捷操作:复制当前行:CTRL+D
快速补全代码,使用quicktext
注意:使用时语言设置成html
例如:dtd + ctrl enter 即可补全HTML代码
例如:in + ctrl enter 即可补全input代码




重要问题:
如何做比如登录页面的操作
1 在控制器中设计一个方法用来显示视图

public function loginshow()
{
$this->load->view('user/login');
}

2 在视图中post数据到控制器中的另外一个方法 ,注意:这边写的action 都是绝对路径,所以要进行修改
<!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>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<link rel="stylesheet" href="style/.css" type="text/css" />
</head>
<body>
<form action="/ci/index.php/user/logininsert" method="post" >
name <input type="text" value="" name="name"/><br>
password <input type="password" value="" name="password" /><br>
E-mail <input type="text" value="" name="email" /><br>
<input type="submit" value="submit" />
</form>

</body>
</html>

3 在另外一个方法中进行数据的操作,例如var_dump等等

public function logininsert()
{
var_dump($this->input->post('name'));

}


使用site_url函数进行简化
目标site_url('控制器/方法'),设置url的访问
1 首先加载helper里面的URL,注意:关键是你在初始化的页面进行加载这个helper
public function loginshow()
{
$this->load->helper('url');
$this->load->view('user/login');
}
2 使用site_url函数进行替换
原来<form action="/ci/index.php/user/logininsert" method="post" >
<form action="<?php echo site_url('user/logininsert')?>"

site_url代表的路径是http://localhost/ci/index.php/



3 使用base_url做文件的上传,设置访问的路径

base_url代表的路径是http://localhost/ci/
建立一个uploads文件下,下面存放这张flash图片
<img src="<?php echo base_url();?>uploads/flash.jpg" alt="" width="120" />


配置自动加载
D:\wampserver\wamp\www\ci\application\config
$autoload['helper'] = array('url');


设置路由 (可以设置伪静态)

路由的路径:
配置文件:ci/application/config/routes.php
默认控制器:
$route['default_controller'] = "welcome";


规则:设置正则表达式,可以定制URL
例如我想要的URL是http://localhost/ci/index.php/news/201309/4.html
我的实际控制器是article/show/$1
那么我写路由的规则就是
$route['news/[\d]{6}/([\d]+\.html)']='article/show/$1';神马意思?不明白!!

如何去掉index.php?
必须要进入到Apache里面,进行修改
复制里面的,htaccess 文件,复制到CI的跟目录下
去掉里面的index,php

还是出错?
修改httpd.conf 文件,使其的rewrite属性打开




设置分页
//分页显示 ,注意:分页类是最常见的类
//思路:1 调用分页类并且正确显示,获取分页类里面的参数:1 偏移量 2 每页数量
// 2 根据这两个分页量去生成SQL语句,应用到查询 ,SQL语句的原型是select * from 表名 limit 偏移量 ,每页数量
// 3 显示出来数据
// 4 完善:1 查询数据库的全量并且赋值 2 做分页的美化和优化 3 如何和model类结合来进行设置 4 显示页面的美化
// 那么,其实设计的思路是分页------->数据库---------->显示内容



public function fenye( )
{
//创建分页对象并且初始化
$this->load->library('pagination');
$this->load->helper('url');

//配置分页类文件,也就是超链接下面的url地址
$page_size=10;
$config['base_url'] =site_url('user/fenye');
$config['per_page']=$page_size;
$config['total_rows']=200;
$config['first_link'] = '首页';
$config['last_link'] = '末页';
$config['prev_link'] = '上一页';
$config['next_link'] = '下一页';
$this->pagination->initialize($config);

//做偏移量的设置,做数据库语句的设置生成
$offset=intval($this->uri->segment(3));
$sql="select * from xqcx limit $offset ,$page_size ";
$query = $this->db->query($sql);
$result=$query->result();

//查询出来的结果集和这个分页的链接都传递到页面上去
$data['user_result']=$result;
$data['links']= $this->pagination->create_links();
$this->load->view('user/fenye',$data);
}


前台显示:
<!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>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<link rel="stylesheet" href="style/.css" type="text/css" />
</head>
<body>
<h1>分页测试</h1>
<?php var_dump($user_result) ?>
<?php echo $links?>
</body>
</html>


文件上传
1 需要前台手动创建一个upload目录,这个目录是在根目录的同级目录下
2 显示上传页面
public function file(){
$this->load->helper('url');
$this->load->view('user/file');
}


3 上传页面,做好action动作,注意配置 enctype="multipart/form-data"

<!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>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<link rel="stylesheet" href="style/.css" type="text/css" />
</head>
<body>
<form action="<?php echo site_url('user/upload') ?> " method="post" enctype="multipart/form-data" >
<input type="file" name="pic" />
<input type="submit" value="上传" />
</form>

</body>
</html>

4 在控制器中做上传
public function upload(){
//配置当前的上传参数
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png|jpeg';
$config['file_name']=uniqid();
//调用上传文件的类和方法
$this->load->library('upload',$config);
$this->upload->do_upload('pic');
//对调用结果进行判断,打印数组
//var_dump ($this->upload->data()) ;
$data=$this->upload->data();
echo $data['file_name'];
}



session
ci的session 是放在cookie里面的,最多不能放超过4K的数据
session 类一般是初始化以后就可以使用了,时长5分钟
public function getsession()
{
//生成随机的字符串作为加密用的key
//在这个之前,首先开启配置文件中的加密key,路径是www\ci\application\config
//echo md5(uniqid());exit;
//找到那一行,$config['encryption_key'] = '08eecdf63ec31d37a6ae1f24f11382ef';然后就可以注释掉
//注意,底下还有很多对于session的加密配置可以修改
$this->load->library('session');
$user=array('id'=>3,'name'=>'jack');
$this->session->set_userdata('user',$user);
}


public function showsession()
{
$this->load->library('session');
$user=$this->session->userdata('user');
var_dump($user);

}



验证码

public function yanzheng()
{
$this->load->helper('captcha');
$this->load->helper('url');
$vals = array(
//'word' => 'Random word',
'word' =>rand(1000,9999),
'img_path' => './captcha/',
'img_url' => base_url().'captcha/',
'font_path' => './path/to/fonts/texb.ttf',
//'img_width' => '50',
//'img_height' => 30,
//'expiration' => 7200 图片存在的时间
);
$cap = create_captcha($vals);
echo $cap['image'];
//var_dump($cap);
//传递图片给登录页面来使用
//$this->load->view('index',array('cap'=>'$cap['image']'));

//如何验证
//session_start();
//$_SESSION['cap']=$cap['word'];
}





表单辅助函数
注意:其实只需要一个insert方法就可以了,不需要以前那么复杂的add方法

public function logininsert()
{
//var_dump($this->input->post('name'));
$this->load->library('form_validation');
$this->form_validation->set_rules('name', '用户名', 'required');
$this->form_validation->set_rules('password', '密码', 'required');
$this->form_validation->set_rules('email', '邮箱', 'required|valid_email');
$bool=$this->form_validation->run() ;
if($bool){
//进行数据的判断和验证

}else{
$this->load->view('user/login');
}


}

至于前台的页面也要设计

<!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>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<link rel="stylesheet" href="style/.css" type="text/css" />
</head>
<body>
<?php echo validation_errors(); ?>
<form action="<?php echo site_url('user/logininsert')?>" method="post" >
name <input type="text" value="<?php echo set_value('name'); ?>" name="name"/> <?php echo form_error('name','<span>','</span>'); ?> <br>
password <input type="password" value="<?php echo set_value('password'); ?>" name="password" /><?php echo form_error('password','<span>','</span>'); ?> <br>
E-mail <input type="text" value="<?php echo set_value('email'); ?>" name="email" /><?php echo form_error('email','<span>','</span>'); ?> <br>
<input type="submit" value="submit" />
</form>
<img src="<?php echo base_url();?>/uploads/flash.jpg" alt="" width="120" />
</body>
</html>









转载于:https://www.cnblogs.com/backfish/p/4343921.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值