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文件夹下面建立的模型文件