您的位置:首页 > 其它

公益图书馆-学习笔记一

2014-08-08 18:59 197 查看
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文件夹下面建立的模型文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: