作为我大天朝的程序员,如果不会点thinkphp框架确实有点说不过去了(虽然作为菜鸟的我才入坑没几个月)。不过不会也没关系,很简单的一个php框架。今天为大家介绍的是thinkphp如何实现验证码的功能。

thinkphp自带验证码功能,我们直接调用就行了。发展到现在thinkphp已经有好几个正式版本了,最新的版本是thinkphp5.0。今天我将给大家介绍一下5的版本和3的版本。

thinkphp3的版本:

第一步:在我们相对应的控制器创建一个输出验证码方法

public function verify()
{
$Verify = new \Think\Controller\Verify();
$Verify->fontSize = 20; // 字体大小
$Verify->length = 6; // 多少个字符
$Verify->useNoise = false; // 是否添加杂点
$Verify->imageW = 233; // 验证码宽度
$Verify->imageH = 50; // 验证码高度
$Verify->entry();
}

第二步:在页面输出我们的验证码

<img src="{:U('Admin/verify')}" class="verifyCode" name="admin_verify" title="点击刷新验证码">

完成以上的操作即可。接下来,我们开始实现附加功能。

第一个点击验证码实现刷新(其实就是使用一个ajax方法再去重新加载一次图片输出而已):在我们的js中写入如下方法。

var verifyImg = $(".verifyCode");
var verifyPath = verifyImg.attr("src");
verifyImg.click(function () {
if (verifyPath.indexOf("?")>0) {
$(this).attr("src", verifyPath+'&random='+Math.random());
}else{
$(this).attr("src", verifyPath.replace(/\?.*$/,' ')+'?'+Math.random());
}
)})
// 或者直接不单独写js方法,直接给图片添加一个点击事件
<img src="{:U('Admin/verify')}" class="verifyCode" name="admin_verify" title="点击刷新验证码" onclick="this.src=\'' .{:U('Admin/verify')}. '?id=\'+Math.random();">

第二个就是后台验证我们的验证码正确性:先创建一个公共的验证函数(公共的配置函数文件是在common下面,可定义在项目的公共目录也可在模块的功能目录),在再我们接受用户信息提交的地方做验证并将错误信息反馈给用户。

// 公共的验证函数(建议放在项目的公共目录中,便于多个模块调用)
// 公共函数在系统中可以直接使用
function check_verify($code, $id = ""){
$verify = new \Think\Verify();
return $verify->check($code, $id);
}
// 接收页面传入的填写的验证码值
$data['admin_verify'] = I('post.admin_verify');
if (check_verify($data['admin_verify'])) {
$this->error("验证码不正确", U("login"), 3);
}

 thinkphp5的版本:

thinkphp5是一个历史性的变革,这里就不单独为大家介绍了。直接放大招了。

第一步:在我们的配置文件(config.php)中直接配置如下内容

/**
*需要开启url路由:'url_route_on' => true,
*/
'captcha' => [
// 验证码字符集合
'codeSet' => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY',
// 验证码字体大小(px)
'fontSize' => 25,
// 是否画混淆曲线
'useCurve' => true,
// 验证码图片高度
'imageH' => 30,
// 验证码图片宽度
'imageW' => 100,
// 验证码位数
'length' => 5,
// 验证成功后是否重置
'reset' => true
],

第二步:在我们的模板文件中输出即可

// 方式一(建议采用该方式)
<img src="{:captcha_src()}" alt="captcha" />
// 方式二
{:captcha_img()}

对比thinkphp3的版本,我们同样实现其他附加的功能。

第一个点击刷新:这里和thinkphp3的版本一致,就不单独介绍了。

第二个就是验证码验证:这里可以使用我们tp5内置的验证(建议),也可采用自定义验证。

// 内置验证
$this->validate($data,[
'captcha|验证码'=>'require|captcha'
]);
// 自定义验证
if(!captcha_check($captcha)){
//验证失败
};

自此thinkphp常用的版本在验证码的功能上已经介绍完了,不知道你还有什么问题没?如果有什么问题可以即时反馈本邮箱(18228937997@163.com),可以在文章下方留言。随时欢迎大家的骚扰。

下面的链接是本人在使用thinkphp遇见的问题,希望对你有所帮助。http://www.cnblogs.com/qqblog/p/6639653.html

thinkphp验证码实现。的更多相关文章

  1. ThinkPHP验证码类

    //ThinkPHP验证码类使用$config = array( 'fontSize' => 30, // 验证码字体大小 'length' => 3, // 验证码位数 'useNois ...

  2. thinkphp验证码(总结之后,效率非常好)

    thinkphp验证码(总结之后,效率非常好) 一.总结 1.总结:总结之后,效率非常好,复习的时候也才方便,也能深入到细处,非常方便建立熟悉感和突破使用困境 2.验证码使用中文集或者繁体集设置:这个 ...

  3. thinkphp验证码不现实多半是bom惹的祸

    thinkphp 验证码不现实多半是bom惹的祸,下面是驱除bom的代码: 链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5 免费 ...

  4. ThInkPHP验证码不显示,解决方法汇总

    出现ThInkPHP验证码不显示的情况 官方提示如下:如果无法显示验证码,请检查:① PHP是否已经安装GD库支持:② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出):(打开验证码文件为 ...

  5. thinkphp验证码

    thinkphp自带验证码 前端页面: <div style="position:absolute;z-index:3;top:160px;left:180px;"> ...

  6. Thinkphp验证码异步验证第二次及以后验证,验证错误----待解决

    今天进行差错时遇到的问题.别人的回答----链接(http://www.thinkphp.cn/topic/28968.html) 3.2.3版本里的check方法会在第一次验证正确后清除SESSIO ...

  7. thinkphp验证码使用

    在thinkphp中使用验证码很容易,只要调用thinkphp现有的方法就可以.当然,php的GD库肯定是要开的(就是在php.ini中要加载gd模块). thinkphp 3.1 --------- ...

  8. thinkphp 验证码的使用

    在thinkphp中使用验证码很容易,只要调用thinkphp现有的方法就可以.当然,php的GD库肯定是要开的(就是在php.ini中要加载gd模块). thinkphp 3.2 --------- ...

  9. Thinkphp 验证码、文件上传

    一.验证码 验证码参数 例题:登录时验证下验证码 LoginController.class.php <?php namespace Home\Controller; use Think\Con ...

  10. thinkphp验证码的使用

    thinkphp不仅封装了验证规则 还封装了验证码 文件的位置是ThinkPHP\Library\Think\Verify.class.php 下面简单的说一下如何使用 我们现在控制器里新建一个方法 ...

随机推荐

  1. Android使用Gradle命令动态传参完成打包,不需要修改代码

    不得不说,Gradle很强大,有人会问Gradle是什么?这里也不细讲,在我认为他就是一个构建神器.Gradle 提供了: 一个像 Ant 一样的非常灵活的通用构建工具 一种可切换的, 像 Maven ...

  2. Android 自定义Dialog中加EditText弹不出键盘跟Dialog遮挡键盘的问题

    先上两张图 第一张问题很明显,第二张是成功的图, 其实第一张是加了 //getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INP ...

  3. Unity 多个Android sdk 插件如何组织目录

    一般Android 插件放在 Assets/Plugins/Android/ 下, 但是一个项目可能要用到多个sdk , 比如既要用 阿里九游的sdk 又要用 share sdk 怎么办呢, 难道要只 ...

  4. SharePoint中遇到Timeout

    使用SharePoint时会遇到不止一种的timeout(即超时)错误. 如果遇到了timeout, 该怎么区分呢? 大致上SharePoint可以控制和影响的timeout地方如下: 1. Shar ...

  5. Markdown 使用方法总结

    标题: [#]  表示一级标题 [##] 表示二级标题 [###]表示三级标题 引用块:在引用文本前插入 Tab,具体几个 Tab 根据文本所处的位置不同而不同 列表:[ - ]即一个空格加上一个中划 ...

  6. 【Leetcode】【Easy】Plus One

    Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...

  7. Linux --Mysql数据库搭建

    Mysql数据库 安装 准备: [root@localhost /]# rpm -e mysql --nodeps 将rpm方式安装的mysql卸载   [root@localhost /]# gro ...

  8. 西门子 1500 1200 PLC,位访问, 字节访问

    访问byte,word中的位 mybyte.%X1 myword.%X1 访问word/dword中的byte myword.%B0 myword.%B1 myDword.%B0 文中mybyte, ...

  9. Visual Studio 2012 未找到与约束 ContractName问题,及printf unsafe问题

    1.用VS 2012 创建c++项目失败,提示未找到与约束 ContractName .............的错误 解决办法:下载VS 2012 补丁,很小的一个补丁,不过很管用 地址:http: ...

  10. Jerry的ABAP原创技术文章合集

    我之前发过三篇和ABAP相关的文章: 1. Jerry的ABAP, Java和JavaScript乱炖 这篇文章包含我多年来在SAP成都研究院使用ABAP, Java和JavaScript工作过程中的 ...