公益图书馆-学习笔记一

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

原文地址:https://www.cnblogs.com/wingjay/p/3900020.html