zoukankan      html  css  js  c++  java
  • 总结回顾---3

    【一】验证码

    验证码全称:captcha(全自动识别机器与人类的图灵测试),简单理解就是区分当前操作是人执行的还是机器执行的

    常见验证码分3种:页面上图片形式、短信验证码(邮箱验证可以归类到短信验证码,只是载体不同。一个短信一个邮件)、语音验证码(点击后给手机打电话,机器读两遍验证码)。

    注意:现在流行的刷脸是验证形式,不是验证码

    (1)图片验证码

    GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片加水印。

    gd操作流程:①画布;②画干扰线、干扰点、生成验证码随机数画上去;③保存到session里;④输出图片

    (2)验证码封装函数

    在ThinkPHP里系统封装了验证码类:Verify.class.php,文件位置ThinkPHP/Library/Think/Verify.class.php

    ①加密方式:具体加密流程在文件位置底部

    ②验证码字符集:通过仔细观察验证码字符集可以发现少了许多字符,比如1,9l,g等。因为0和o,g和9等极其相似,所以为了避免频繁刷新验证码,减少服务器负担,所以将这些容易混淆的字符都去掉了

    ③验证码过期时间:因为验证码是存储在session中的,在规定的时间内若没有输入验证则会失效

    ④关于里面设置的字体、背景图,都在同级文件夹Verify中

    ⑤方法介绍

    1. 构造方法:在实例化时可以传递一个数组,用于和其成员属性config合并,生成新配置

    2. check方法:校验验证码,传递参数(用户输入的验证码)

    3. entry方法:输出验证码图片,并保存到session。通过header头输出,输出格式png

    4. 除了以上几个方法(配置、校验、输出),其他方法(例如加密验证码、绘制背景图、画杂点等)均为私密方法,不对外开放

    (3)生成验证码

    包含常规验证码和中文验证码

    1. 常规验证码

    由数字和大小写字母组成的验证码

    注意:①验证码黑屏问题:输出前头部有Bom;②验证码字体控制一般用字体表4.ttf;

    2. 中文验证码

    注意:字体文件夹Verify下的中文字体文件夹zhttfs初始化时为空,所以无法和常规验证码一样直接使用。

              字体文件可以在本地找到,控制面板---切换到大图标,找到字体--列出本地全部字体---复制黑体常规(中文即可)到中文文件夹zhttfs下。

    补充说明:

    ①关于中文验证码:实际开发时,避免使用中文验证码(考虑外企合作);

    ②需要中文字体的支持,中文字体可以在本地找到或者网上下载复制到中文的文件夹下;

    ③使用中文验证码必须开启php_mbstring扩展(该扩展项在php.ini里,去掉扩展前的封号;即可,开启后重启Apache)

    【二】部门管理功能

    (1)部门列表展示

    分析:

    ①控制器DeptController.class.php

    ②方法showList(不要使用list方法,因为list是关键词)

    ③模板文件:showList.html

    下面按步骤编写

          ①创建方法showList来展示模板

          ②将模板文件showList.html复制到View/Dept下(因为控制器为Dept,方法为showList,所以要一一对应)

          ③修改静态资源路径

          ④修该showList方法,获取部门数据。并传递到模板

          ⑤模板遍历读取数据

    注意:1. 模板的if判断,必须加空格

    <if condition="$vol.pid == 0">顶级部门</if>

               2.<else />加/

    (2)

    部门编辑

    分析:

    控制器:DeptController.class.php

    方法:edit(展示模板】处理提交)

    模板:edit.html

    下面按步骤编写代码

    (1)编写edit方法,实现模板展示

    (2)修改编辑按钮,跳页时带上id

    <td><a href="__CONTROLLER__/edit/id/{$vol.id}">编辑</a></td>

    (3)复制模板文件edit.html到指定位置,Admin/View/Dept/edit.html;修改静态资源路径

    (4)修改edit方法,展示原来数据

    (5)处理表单提交页面

    隐藏域:因为系统限制不能执行批量修改,所以修改时必须指定主键。所以必须添加一个隐藏域,来传递id

    jquery提交:

    复制代码
    <script type="text/javascript">
        $(document).ready(function(){
            $('button').on('click',function(){
                $('form').submit();//提交表单
            })
        })
    </script>

    (6)数据的保存,修改edit方法后的代码

    【三】部门删除

    分析

    控制器:DeptController.class.php

    方法:del

    模板:删除不需要模板文件,因为删除就是个处理数据过程。和登出一样

    说明:有单个删除,也有批量删除。而编辑只能单个编辑,不能批量编辑。

    (1)修改模板,添加复选框

    (2)点击删除按钮,实现删除

           ①点击删除,获取复选框的值(jquery实现)。之后到php删除方法

    ②编写del方法,实现删除

    复制代码
            //真删除---批量和单个删除
            public function del(){
                //接收参数
                $id  = I('get.id');
                //模型实例化
                $model = M('dept');
                //删除
                $result = $model->delete($id);
                //判断结果,删除成功或失败都会跳转到列表页,所以不用加入跳转链接
                if ($result) {
                    $this->success('删除成功');
                }else{
                    $this->error('删除失败');
                }
            }
    复制代码

    【四】

    处理表单信息的提交操作

    在控制器deptController.class.php里add方法判断是否是POST提交。若是则提交,否则展示

    扩展:

              1. 方法判断---------判断请求是否是post,之前用$_POST判断,但在ThinkPHP里系统封装了几个比较实用的常量,可以直接用常量来判断

                 IS_POST、IS_GET、IS_AJAX、IS_CGI、IS_PUT等

              2. 数据接收---------之前用$_POST接收数据,在ThinkPHP里使用I快速方法来接收数据。I方法可以接收任何类型输入post、get、request、put等。且系统默认自带防止SQL

    注入的方法(使用PHP内置函数htmlspecialchars,将预定义字符<,>转化为HTML实体字符)。因为$POST没有对数据进行过滤,还得手动过滤。所以推荐使用I方法接收数据

    自带过滤效果,防止SQL注入

             3.I 快速方法语法:I('变量类型.变量名',['默认值'],['过滤方法']),过滤方法可以自定义过滤

                接收整个数组:I('get');

    【五】后台登录

    (1)分析

    控制器:PublicController.class.php

    模板:login.html

    方法:login   captacha(验证码)  checkLogin(验证登录)

    下面按照步骤一次编写:

    (2)验证码

    ①控制器里创建captacha,用于创建验证码;

    ②在模板文件login.html输出验证码;

    验证码:<img src="__CONTROLLER__/captacha">

    ③添加点击刷新验证码,给图片绑定点击事件

    验证码:<img onclick="this.src='__CONTROLLER__/captacha'" src="__CONTROLLER__/captacha">

    这样只在Chrome下生效,测试后在其他浏览器无效。为了兼容其他浏览器需要在地址后面加上随机数,最终代码

    验证码:<img onclick="this.src='__CONTROLLER__/captacha/t/'+Math.random()" src="__CONTROLLER__/captacha">

    打开浏览器测试生效,测试Network,会发现点击红藕每次都会发送新的请求,请求不一样。所以生效

    (3)验证登录前创建用户表

    表名:sp_user

    ①创建表,表结构新增模拟数据

     ②修改模板元素

         1. 添加form表单指定提交位置

    <form action="{:U(checkLogin)}" method='post'>
    代码块
    </form>

         2. 对于登录按钮,前端写好的样式为

    <a href='index.html' class='btn'>登录</a>

    这里改为href='javascript:;',阻止浏览器默认行为,防止点击完就跳页的行为

       3. 利用jquery实现表单提交

    $(document).ready(function(){
            $('.btn').on('click',function(){
                $('form').submit();//提交表单
            })
        })

    (4)编写checkLogin方法,验证用户登录

    验证顺序,先对验证码进行验证,因为只有验证码不会对服务器发送请求。验证码正确的话再去验证用户名和密码。

    具体注意事项在代码里做了介绍

    5)修改登录成功后的用户名

    {$Think.session.username}

    模板输出系统变量----模板读取session数据,

    {$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
    {$Think.session.user_id} // 输出$_SESSION['user_id']变量
    {$Think.get.pageNumber} // 输出$_GET['pageNumber']变量
    {$Think.cookie.name}  // 输出$_COOKIE['name']变量
    

    支持输出 $_SERVER$_ENV、 $_POST、 $_GET、 $_REQUEST$_SESSION和 $_COOKIE变量。

    【五】退出

    (1)控制器编写退出方法

    复制代码
    //退出方法
            public function logout(){
                //清除session
                // session_destroy();原生方法
                session(null);
                //跳转登录页面
                $this->success('登出成功',U('login'),3);
            }
    复制代码

    (2)修改跳转地址,先让其跳到Public/logout,清空session。然后跳到登录页

     注意:因为U方法和__PUBLIC、__CONTROLLER__等都是模板常量,只能在模板里使用。所以js文件里无法使用这些常量去跳转路径。除非将js直接写到模板文件里去,例如

    复制代码
    <script type="text/javascript">
        $(document).ready(function(){
            $('.logout').on('click',function(){
                var path= "__CONTROLLER__";
                alert(path);//这里便会提示出模板常量
            })
        })
    </script>
    复制代码

    或者在js里写,/表示从域名后开

    域名/入口文件/分组/控制器名/方法名
    window.location.href='/index.php/Admin/Public/logout';

    接下来的部门管理在后面文章视频学习笔录---ThinkPHP---案例2--部门管理功能

    .

  • 相关阅读:
    其他
    聚类算法:ISODATA算法
    大神博客
    Fiddldr 教程之:HTTP协议详解(转)
    设计模式之装饰模式的复习
    NOIP 2011 聪明的质监员
    CSP-S2020/NOIP2020模板总结(Updating)
    CSP-S2020/NOIP2020复习指南
    洛谷 U137412 高斯的小宇宙
    NOIP2020模板测试题大全
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8684790.html
Copyright © 2011-2022 走看看