公益图书馆-学习笔记

1、HTML <caption> 标签

caption 标签必须紧随 table 标签之后。您只能对每个表格定义一个标题。通常这个标题会被居中于表格之上。

<table border="6">
<caption>表格标题</caption>

2、模板继承是thinkphp的一项更加灵活的模板布局方式,模板继承不同于模板布局。

模板可以定义一个基础模板,并且定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。

例如下面定义了一个base.html基础模板及block:

<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <block name="title"><title>标题</title></block>
 </head>
 <body>
 <block name="menu">菜单</block>
 <block name="left">左边分栏</block>
 <block name="main">主内容</block>
 <block name="right">右边分栏</block>
 <block name="footer">底部</block>
 </body>
 </html>

然后我们在子模板(其实是当前操作的入口模板)中使用继承:

<extend name="base" />
 <block name="title"><title>{$title}</title></block>

<block name="menu">
 <a href="/" >首页</a>
 <a href="/info/" >资讯</a>
 <a href="/bbs/" >论坛</a>
 </block>

<block name="left"></block>//为空区块,则表示删除基础模板中的该区块内容

<block name="content">
 <volist name="list" id="vo">
 <a href="/new/{$vo.id}">{$vo.title}</a><br/>
{$vo.content}
 </volist>
 </block>

<block name="right">
最新资讯:
 <volist name="news" id="new">
 <a href="/new/{$new.id}">{$new.title}</a><br/>
 </volist>
 </block>

<block name="footer">
@ThinkPHP2012 版权所有
 </block>

在当前子模板中,只能定义区块而不能定义其他的模板内容,否则将会直接忽略,并且只能定义基础模板中已经定义的区块。

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

子模板中的区块定义顺序是随意的。



3、当输入用户名、密码等信息时要采用POST提交数据可加密

//如果不是post提交,直接报错。
if (!IS_POST) halt("页面不存在");

利用 I 函数来获取刚提交的POST数据

$username = I(‘post.username‘);
$password = I(‘post.password‘);
$verifyCode = I(‘post.verify‘);
$autologin=I(‘post.autologin‘);



4、数据库操作

登陆验证用户名及密码:利用用户名找出数据库中md5加密后的密码与输入的密码(进行md5)对比

$User = D("User"); //获取数据表对象
$res = $User->where(array("username" => $username))->select();  //筛选出指定username的对象

//返回数据data是json对象,{"info":"demo info","status":"y"}



5、一些变量含义

$num=session(‘loginTime‘); //登陆次数,保存在服务器端写入session

session(‘needCode‘,false); //不需要验证码

if(session(‘loginTime‘)>3)
{
session(‘needCode‘,true);
}  //如果登陆次数大于3次则显示验证码



6、验证码

ThinkPHP的扩展中由图像处理类Image以及用于生成随机验证码的字符处理类String共同完成验证码功能。

生成验证码其实很简单,只需要在你的Action中添加操作方法,一般为了避免受权限控制的影响,我们通常把这个方法放到公共Action或者无需授权就能访问的控制器(例如PublicAction)中,下面我们以放到PublicAction控制器类中为例,代码如下:

class PublicAction extends Action{
    Public function verify(){
        import(‘ORG.Util.Image‘);
        Image::buildImageVerify();
    }
 }

定义后,我们可以在任何需要验证码的模块中调用Public模块的verify方法来显示验证码,需要做的仅仅是在需要的模板中添加如下调用代码:

<img src=‘!-APP-!/Public/verify/‘ />

这样,我们访问该页面后就能看到默认的验证码图像显示,如下所示:

验证码显示设置

默认情况下,验证码采用随机的4位数字显示,我们可以通过参数来设置不同的显示方式,Image类的buildImageVerify方法用法如下:

buildImageVerify 生成图像验证码
用法 buildImageVerify($length,$mode,$type,$width,$height,$verifyName)
参数 length 验证码的长度,默认为4位数
model 验证字符串的类型,默认为数字,其他支持类型有0 字母 1 数字 2 大写字母 3 小写字母 4中文 5混合
type 验证码的图片类型,默认为png
width 验证码的宽度,默认会自动根据验证码长度自动计算
height 验证码的高度,默认为22
verifyName 验证码的SESSION记录名称,默认为verify

验证输入

每次生成验证码的时候,就会通过SESSION记录本次的验证码的md5后的字符串信息,所以,要检查验证码是否正确,我们只需要在Action中使用下面的代码判断就行了:

if(session(‘verify‘) != md5($_POST[‘verify‘])) {
   $this->error(‘验证码错误!‘);
 }

建议使用session方法来获取SESSION值,因为验证码生成方法里面也是采用的session方法保存的,可以避免受session前缀的影响而出错。这里的verify名称取决于你的验证码的verifyName参数的值。
如果你的session功能不正常,可能会导致验证码检测报错的情况发生。

中文验证码

BuildImageVerify方法不支持中文验证码的显示,如果需要显示中文验证码,请使用GBVerify方法,用法示例:

Public function verify(){
    import("ORG.Util.Image");
    Image::GBVerify();
 }


7、ThinkPHP中实例化对象M()和D()的区别?ThinkPHP如何实例化对象?

在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法。
通俗一点说:
M实例化参数是数据库的表名。
D实例化的是你自己在Model文件夹下面建立的模型文件

公益图书馆-学习笔记,布布扣,bubuko.com

时间: 2024-08-25 05:00:29

公益图书馆-学习笔记的相关文章

公益图书馆-学习笔记四

1.复选框及其使用方法: <select class="form-control statusSelect" name="select" onchange="javascript:location.href=this.value;"> //注意: onchange内的javascript函数 <option selected value="/user/index?status=yes">我被选中<

公益图书馆-学习笔记三

1.脚手架页面布局--bootstrap 我们的整个页面分成了16个span,即16部分.在添加一个block时,要在里面设置一个div,然后div里面设置该模块所占的span数和内边距: <block name="content"> <div class="span12 p20"> <form ...> </div> </block> 该代码表示content模块占据12个span,内边距为20. 2.T

公益图书馆-学习笔记二

1.在视图中显示控制器变量. 在控制其中为变量赋值即可,如 $this->info_user=$user;然后在视图中可直接使用. 2.html显示数组使用 volist标签 <volist name="info_user" id="vo"> {$vo.username} {$vo.email}即可使用数组里的键值对 3.隐藏button <button type="submit" style="display:

公益图书馆-学习笔记五

使用jquery来设置html元素的显示与隐藏属性,同时调整div的高度 点击上面的“收起回复”超链接之后,执行下面几个动作: a.“收起回复”变成“回复(3)”: b.回复全部隐藏: c.重新自适应高度. 再次点击“回复(3)”后,执行下面几个动作: a.“回复(3)”变成“收起回复”: b.回复全部显示: c.重新自适应高度. 1.为了绑定jquery函数,先对html元素或div要设置 类class 2.实现“收起回复”和“回复(3)”之间的转换 对象:.replyTrigger 内容:使

公益图书馆-学习笔记六 volist嵌套

volist嵌套使用 1.重要特性是如果volist的name对应一个数组,则它会把数组遍历一遍.例如 <volist name="comments" id="vo">XXX</volist>而 $comments[0]=$comment1; $comments[1]=$comment2;则上面代码会先把$comment1当成vo把代码XXX执行一遍:然后再把$comment2当成vo再把XXX执行一遍.所以画评论框时只要上面一段代码,它就会

初步boost之pool图书馆学习笔记

pool 内存池概述 通常我们习惯直接使用new.malloc等API申请分配内存,这样做的缺点在于:因为所申请内存块的大小不定.当频繁使用时会造成大量的内存碎片并进而减少性能. 内存池则是在真正使用内存之前,先申请分配一定数量的.大小相等(普通情况下)的内存块留作备用.当有新的内存需求时.就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存. 这样做的一个显著长处是尽量避免了内存碎片.使得内存分配效率得到提升. pool库概述 pool库实现了一个高速.紧凑的内存池库,不仅可以管理大量

公益图书馆-UserController-代码学习

1.我的捐书信息 /** * @author Edwin * @description 显示捐书信息 */ public function donate() { $BookDB = D('Book'); //获取BOOK数据表对象,实例化 $id = session('user')['id']; //获取当前用户id信息,比如我的id是73 $where['contributor_id'] = $id; //contributor_id = $id为查询条件 $count = $BookDB->

公益图书馆-OnshelfController-代码学习

1.书籍上架 更新数据库 $id = $_GET['id']; //书籍id $bookDB = D("Book"); //实例化数据表对象 $data['status'] = "ON_SHELF"; //准备修改的数据项 把status变换为ON_SHELF $result = $bookDB->update('id='.$id,$data); //数据库更新操作 print_r($result); redirect("/onshelf/index

公益图书馆-Contribute捐赠-代码学习

1.ContributeController.class.php 控制器 <?php /** * Created by PhpStorm. * User: lxd * Date: 14-7-27 * Time: 下午2:43 */ namespace Home\Controller; class ContributeController extends SyController{ /**@author lxd * @description 首页 */ public function index(