zoukankan      html  css  js  c++  java
  • tp-note

    1、AJAX传路径
    img中的路径URL通过ajax传值出现错误时,在JS中调用
    encodeURLComponent(URL);方法进行编码后传值,在处理页面
    调用urldecode(URL);方法进行解码

    2、TP验证码
    2.1 生成验证码的操作方法

    1 functions yzm()
    2 {
    3     $Verify = new ThinkVerify();
    4     $Verify->entry();
    5 }

    备注:
    a.如果需要生成多个验证码,entty方法需要传入标记信息;
    b.验证码的参数设定

     1 $config = array( 
     2     'expire' => 1000,//验证码有效时间(秒)
     3     'useImgBg => false,//是否使用背景图片,默认false,开启后随机使用 ThinkPHP/Library/Think/Verify/bgs 目录下面的图片
     4     'fontSize' => 30,// 验证码字体大小(像素)
     5     'useCurve' => true,//是否使用混淆曲线
     6     'imageW' => 0,//验证码宽度,0为自动计算 
     7     'imageH' => 0,//验证码高度,0为自动计算 
     8     'length' => 3,// 验证码位数 
     9     'fontttf' => '5.ttf',//指定验证码字体,默认自动选择,也可指定ThinkPHP/Library/Think/Verify/ttfs/目录下的字体文件
    10     'useNoise' => false, // 关闭验证码杂点);
    11 
    12 $Verify = new ThinkVerify($config);

    2.2显示页面

    1 <div>
    2     <img id="yzm" src="__CONTROLLER__/yzm" />
    3     <input type="text" />
    4 </div>    

    2.3检测验证码的操作方法id为验证码标记

    1 function check_verify($code, $id = '')
    2 { 
    3     $verify = new ThinkVerify(); 
    4     return $verify->check($code, $id);
    5 }

    2.4点击改变验证码

    1 <script type="javascript>
    2 $("#yzm").click(function(){
    3     $(this).attr("src","__CONTROLLER__/yzm");
    4 })
    5 </script>

    3、文件上传

    3.1 显示页面

    1 <form action="__ACTION__" enctype="multipart/form-data" method="post" >
    2 <input type="file" name="photo" />
    3 <input type="submit" value="提交" >
    4 </form>

    3.2 上传文件操作方法

     1 function ShangChuan()
     2 {
     3     if(empty($_POST)
     4     {
     5         $this->display();
     6     }
     7     else
     8     {
     9         $upload = new ThinkUpload();// 实例化上传类    
    10         $upload->maxSize = 3145728 ;// 设置附件上传大小        
    11         $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型  
    12         $upload->rootPath = './Public/';//设置上传文件根路径
    13         $upload->savePath = './Public/Uploads/'; // 设置附件上传目录    
    14         // 上传文件   
    15         $info = $upload->upload();    
    16         if(!$info)
    17         {
    18             // 上传错误提示错误信息        
    19             $this->error($upload->getError());    
    20         }
    21         else
    22         {
    23             // 上传成功,获取上传文件信息      
    24         echo $file['savepath'].$file['savename']; //获取上传文件路径和名称
    25         }
    26     }
    27 }

    3.3 上传文件命名规则

    a.函数方式命名
    如果传入的字符串是一个函数名,那么表示采用函数动态生成上传文件名(不包括文件后缀)

    1 $upload->saveName = 'time';// 采用时间戳命名
    2 $upload->saveName = 'com_create_guid';// 采用GUID序列命名
    3 $upload->saveName = 'myfun'; // 采用自定义函数命名

    如果是只有一个参数或者没有参数的函数,直接使用字符串设置即可,如果需要传入额外的参数,可以使用数组方式

    1 $upload->saveName = array('date','Y-m-d'); // 采用date函数生成命名规则 传入Y-m-d参数
    2 $upload->saveName = array('myFun',array('__FILE__','val1','val2'));// 如果有多个参数需要传入的话 可以使用数组

    b.直接设置上传文件名
    如果传入的参数不是一个函数名,那么就会直接当做是上传文件名

    1 $upload->saveName = time().'_'.mt_rand();//采用时间戳加一个随机数的组合字符串方式
    2 $upload->saveName = 'ThinkPHP';//固定设置一个上传文件的命名规则

    c.保持上传文件名不变

    1 upload->saveName = '';

    一般来说不建议保持不变,因为会导致相同的文件名上传后被覆盖的情况。

    3.4 子目录保存

    如果希望对上传的文件分子目录保存,可以设置autoSubsubName参数来完成

    1 // 开启子目录保存 并以日期(格式为Ymd)为子目录
    2 $upload->autoSub = true;
    3 $upload->subName = array('date','Ymd');

    可以使用自定义函数来保存

    1 // 开启子目录保存 并调用自定义函数get_user_id生成子目录
    2 $upload->autoSub = true;
    3 $upload->subName = 'get_user_id';

    注意:如果get_user_id函数未定义的话,会直接以get_user_id字符串作为子目录的名称保存。

     4、关于JS和CSS路径问题

    找路径是从入口文件index.php来找的,在存放JS和CSS的时候可以放到public文件夹下

    a.使用import标签 type属性默认js,起始路径是Public目录,如果指定其他目录可使用basepath属性修改

    1 <import file="Js.Util.Array"  basepath="./Common" />

    js文件导入,两种方式均可,也可导入多个js文件,用逗号隔开

    1 <import type='js' file="Js.Util.Array" />
    2 <import file="Js.Util.Array" />
    3 
    4 <import file="Js.Util.Array,Js.Util.Date" />

    css文件导入,必须指定type属性值

    1 <import type='css' file="Css.common" />

    b.load标签,通过文件方式导入当前项目的公共JS或者CSS,无需指定type属性,可自动判断

    1 <load href="__PUBLIC__/Js/Common.js" />
    2 <load href="__PUBLIC__/Css/Common.css" />

    c.js和css标签,用法和load一致

    1 <js href="/Public/Js/Common.js" />
    2 <css href="/Public/Css/common.css" />

    5、第三方类引入

    有两块地方可以放第三方类:(1)模块下面;(2)Library下面新建文件夹或者旧的文件夹里面;

    放进去之后,需要添加命名空间,命名空间从根命名空间写起

    注意类文件的命名规则和类名的规则

    6、Ajax返回

    (1)url要变为MVC模式,指向的不是具体页面,是操作方法

    (2)在操作方法里面返回值的时候,使用ajaxReturn()方法返回,注意返回类型,返回类型要和第二个参数一致

    (3)date的name要与数据库里的列名一致

    ajaxReturn方法调用,第二个参数返回数据格式默认JSON,可按需改变为"xml"XML格式,"eval"DATE格式

    1 $data = 'ok';
    2 $this->ajaxReturn($data);

    也可以通过配置DEFAULT_AJAX_RETURN进行设置

    7、会话Session  Cookie

    默认情况下,初始化之后系统会自动启动session,如果不希望系统自动启动session的话,可以设置SESSION_AUTO_START为false

    Session赋值:session('name','value');//设置session

    Session取值:$value = session('name');

    删除session:session('name',null);// 删除name    session(null);// 清空当前的session

    判断一个session值是否已经设置:session('?name');// 判断名称为name的session值是否已经设置

    Cookie与Session用法基本相同

    8、防止用户绕过登录直接访问操作方法

    做一个控制器的父类,在该父类里面写一个构造方法,构造方法里面判断session里面有没有值

    9、控制器

    9.1 配置

    读取配置:获取已经设置的参数值:C('参数名称')

    设置新的值:C('参数名称','新的参数值');

    9.2 获取系统常量信息 get_defined_constants(true);

    获取TP框架的根目录:__ROOT__

    获取当前操作方法的路径(包含变量和参数):__SELF__

    获取入口文件路径:__APP__

    获取当前模块路径:__MODULE__

    获取当前控制器的路径:__CONTROLLER__

    获取当前操作方法的路径(不包含变量和参数):__ACTION__

    10、命名空间

    命名空间相当于一个虚拟的目录,正常管理文件使用文件夹--物理区分

    TP框架的初始命名空间是:ThinkPHPLibrary

    在TP框架下命名空间里面使用代表的是初始命名空间(ThinkPHPLibrary)

    a.系统目录下根命名空间是ThinkPHPLibrary下面的文件夹名称命名的

    b.模块的根命名空间是以模块名命名的

    在定义命名空间的时候需要从根写起例如:HomeController 例如:ThinkModel;

    如果要使用某个类文件,引入该类命名空间的时候:使用use关键字,后面写该类的命名空间 后面加上 "文件名"

    如果不想引入命名空间:在造类的对象的时候可以使用(初始命名空间)来找到对应的类

    例如:new ThinkPage(30);

    11、空操作、空控制器

    当访问空控制器时,提示非法操作,会暴露很多系统信息,安全性降低

    11.1 空操作方法

    在控制器父类中的魔术方法:__CALL() 控制器不存在时自动调用,可以通过两种方法解决

    a.在子类中增加_empty()方法

    1 function _empty(){
    2   echo "访问信息不存在";
    3 }

    b.在View/Main/文件夹中新建模板文件

    11.2 空控制器

    在Home/Controller/文件夹中创建EmptyController.class.php文件

     1 <?php
     2 namespace HomeController;
     3 use ThinkController;
     4 class EmptyController extends Controller 
     5 {
     6     public function _empty()
     7     {
     8         echo"访问页面不存在,请确认地址栏是否输入正确";  
     9     }
    10 }

    12、视图模板

    12.1 变量

    注入变量:$this->assign('name',$name);

    模板显示:$this->display();

    12.2 模版继承

    每个区块由<block></block>标签组成,block标签必须指定name属性来标识当前区块的名称,这个标识在当前模板中应该是唯一的,

    block标签中可以包含任何模板内容,包括其他标签和变量,或者是加载外部文件,一个模板中可以定义任意多个名称标识不重复的区块。如下"base.html"模版

     1 <html>
     2 <head>
     3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     4 <block name="title"><title>标题</title></block>
     5 </head>
     6 <body>
     7 <block name="menu">菜单</block>
     8 <block name="left">左边分栏</block>
     9 <block name="main">主内容</block>
    10 <block name="right">右边分栏</block>
    11 <block name="footer">底部</block>
    12 </body>
    13 </html>

    子模板中使用了extend标签定义需要继承的模板,extend标签的用法和include标签一样,你也可以加载其他模板或者使用绝对文件路径加载

    1 <extend name="base" />

    在当前子模板中,只能定义基础模板中已经定义的区块而不能定义其他的模板内容,否则将会直接忽略。可以对基础模板中的区块进行重载定义,

    如果没有重新定义的话,则表示沿用基础模板中的区块定义,如果定义了一个空的区块,则表示删除基础模板中的该区块内容。

    12.3 包含文件

    在当前模版文件中包含其他的模版文件使用include标签,标签用法:

    1 <include file='模版表达式或者模版文件1,模版表达式或者模版文件2,...' />

    模版表达式的定义规则为:模块@主题/控制器/操作

    12.4 内置标签

    a. IF标签

    1 <if condition="($name eq 1) OR ($name gt 100) "> value1
    2 <elseif condition="$name eq 2"/>value2
    3 <else /> value3
    4 </if>

    在condition属性中可以支持eq等判断表达式,同上面的比较标签,但是不支持带有”>”、”<”等符号的用法,因为会混淆模板解析

    修饰符 备用词
    == eq
    != ne,neq
    > gt
    < lt
    >= gte,ge
    <= lte,le
    ! not
    % mod

    b.Foreach标签

    例如: {$vo.id}:{$vo.name} name表示数据源 item表示循环变量。

    1 <foreach name="list" item="vo" key="k" >  
    2  {$k}|{$vo.id}:{$vo.name}
    3 </foreach>

    13、数据库操作

    13.1 Model:数据库中每张表对应一个模型类名是表名,类里面的成员变量是列名把一张表对应为一个类,其中一条数据对应一个对象

    如果我们对该表的模型没有特殊操作的话可以不用建立该模型

    实例化Model的三种方法:

    a. $goods =  new  命名空间GoodsModel();

    b. $goods = D(‘模型标志’);  实例化Model对象

    c. $obj = M();  实例化父类对象

    13.2 查询连贯操作

     1 $car = M("Car"); //实例化数据库
     2 $car->select()); //返回所有数据的二维数组
     3 $attr = $car->where("brand='b002'")->select();//where方法可以添加查询条件
     4 $attr = $car->table("Nation")->select();//table方法可以切换操作表
     5 $attr = $car->field("Code,Name")->select();//可以指定查询的字段
     6 $attr = $car->order("Oil desc")->select();//排序
     7 
     8 $attr = $car->limit(2,2)->select(); //分页查询,如果一个参数n的话就是取前n个
     9 
    10 $attr = $car->page(3,2)->select();//扩展,取第n页的几条数据
    11 
    12 $attr = $car->field("Brand,count(*)")->group("Brand")->select();//分组查询
    13 
    14 select * from Info join Nation on 条件
    15 $attr = $car->join("Brand on Car.Brand = Brand.Brand_Code")->select();//连接查询
    16 
    17 $attr = $car->distinct(true)->field("Brand")->select();//去重
    18 $attr= $car->avg("Price"); //聚合函数
    19 $attr = $car->find();//根据主键取一条数据,不写主键值默认返回第一条 20 $attr = $car->select("c001,c002"); //根据主键值查询,返回二维数组 21 22 $attr = $car->where("Name like '%奥迪%'")->order("Powers desc")->select();

    13.3 添加数据

    方式一:使用add(); 需要一个关联数组作为参数,key必须为字段名称

    $model = D("Info");
    $attr = array(
    'Code'=>'p100',
    'Name'=>'回家',
    'Sex'=>true,
    'Nation'=>'n002',
    'Birthday'=>'1998-2-3'
    );
                
    $attr["Code"] = "p111";
    $attr["Name"] = "数据";
    $attr["Sex"] = false;
    $attr["Nation"] = "n001";
    $attr["Birthday"] = "1990-2-3";*/
                
    $model->add($attr);

    方式二:AR方式  操作实例化的对象

    1 $model->Code = "p112";
    2 $model->Name = "火炬";
    3 $model->Sex  =true;
    4 $model->Nation = "n003";
    5 $model->Birthday = "1999-2-3";
    6             
    7 $model->add();

    方式三:自动收集表单

     1 function Add()
     2     {
     3         if(empty($_POST))
     4         {
     5             $this->display();
     6         }
     7         else
     8         {
     9             $model = D("Info");
    10             $model->create(); //自动收集表单并且创建数据
    11             $model->Sex = $_POST["Sex"]=="男"?true:false;
    12             $z = $model->add();
    13             if($z)
    14             {
    15                 $this->success("添加数据成功!","Add",3);
    16             }
    17             else
    18             {
    19                 $this->error("添加失败!","Add",5);
    20             }
    21         
    22         }
    23         
    24     }

    13.4 数据修改

    方式一:数组方式

    1 $attr = array(
    2 "Code"=>"p001",
    3 "Name"=>"张三",
    4 "Sex"=>true,
    5 "Nation"=>"n001",
    6 "Birthday"=>"1999-2-3");
    7 //调用save方法来修改数据
    8 $model->save($attr);

    方式二:AR方式

    1 $model->Name="王五";
    2 $model->Nation = "n001";
    3             
    4 $model->where("Code='p013'")->save();

    方式三:自动收集表单修改

     1 function Update()
     2     {
     3         $model = D("Info");
     4         if(empty($_POST))
     5         {
     6             $code = "p001";
     7             $attr = $model->find($code);
     8             
     9             $this->assign("shuju",$attr);
    10             $this->display();
    11         }
    12         else
    13         {
    14             $model->create();
    15             $model->save(); 
    16         }
    17     }                           

    主键值不允许修改,只用于查询定位

    13.5 删除数据

     1 function Delete()
     2     {
     3         //删除数据
     4         $model = D("Info");
     5         
     6         //方式一:根据主键值删
     7         $model->delete("p112");
     8         
     9         //方式二:根据条件删
    10         $model->where("Nation='n001'")->delete();
    11     }

    13.6 表单验证

    a. 静态验证:在模型类(model)里面预先定义好该模型的自动验证规则;

    定义格式:

    array(

    array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),

    array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),

     ......);

    1 namespace HomeModel;
    2 use ThinkModel;
    3 class UserModel extends Model{   
    4 protected $_validate = array(     
    5 array('verify','require','验证码必须!'), //默认情况下用正则进行验证  
    6 array('name','','帐号名称已经存在!',0,'unique',1), // 在新增的时候验证name字段是否唯一
    7 array('value',array(1,2,3),'值的范围不正确!',2,'in'), // 当值不为空的时候判断是否在一个范围内 8 array('repassword','password','确认密码不正确',0,'confirm'), // 验证确认密码是否和密码一致 9 array('password','checkPwd','密码格式不正确',0,'function'), // 自定义函数验证密码格式 );}

    静态定义方式因为必须定义模型类,所以只能用D函数实例化模型

     

     

     

     

     

    1. echo $file['savepath'].$file['savename'];
  • 相关阅读:
    SINAMICS S120/S120 EPOS 基本定位修改方向
    西门子 SINAMICS S120 Web server 用户名和默认密码
    在windows bat脚本(batch)中延时
    ubuntu修改字体大小
    python从字符串中提取数字,使用正则表达式
    python读入文档中的一行
    C++控制台暂停
    在ubuntu linux下安装*.sh的方法
    anaconda和jupyter notebook使用方法
    word禁止自动编号
  • 原文地址:https://www.cnblogs.com/xcc2016/p/5725720.html
Copyright © 2011-2022 走看看