介绍介绍福哥今天带着大家完成TFUMS系统的忘记密码功能的第一步——验证用户信息。因为用户数据表里userName和userEmail都是唯一的,它们都可以作为忘记密码的验证手段。而userEmail是需要登录后进行绑定邮箱才会产生的,也就是说它不一定是存在的。综上所述,福哥决定userName和userEmail都要验证,只要其中一...
介绍介绍福哥今天要带着大家完成TFUMS系统的忘记密码功能地第二步——身份验证方式选择的开发。身份验证方式指的是我们要确定这个“忘记密码”的人是不是账号的所有人,既然他不知道密码就只能通过其他方式验证了。前面我们有要求用户设置绑定邮箱,绑定邮箱是账号所有人的私有邮箱,如果“忘记密码”的人可以收到寄到绑定邮箱里的邮件,则证明他就是账号的...
介绍介绍福哥今天带着大家完成TFUMS系统的忘记密码里面的第一种重置方式——通过绑定邮箱重置密码的前半部分功能的开发。思路是这样的,我们先要知道哪个用户忘记了自己的密码,得到用户名之后判断用户名是否有绑定过邮箱。如果有绑定邮箱的话,我们就向这个绑定邮箱里发生一封邮件,邮件里面包含一个网址,网址携带一个验证码。如果用户可以接收到这封邮件...
介绍介绍福哥今天带着大家完成了通过绑定邮箱重置密码的后一部分功能——重置密码功能。这一部分功能的思路是这样的,首先点开发到邮箱里的邮件正文里面的重置链接,这是一个重置密码的表单页面,用户可以直接设置一个新密码。不过,这里面会校验传入的验证码是否有效,如果验证码有效的话才可以完成密码的重置操作。并且,如果密码重置成功后,验证码会被记录到...
介绍介绍福哥今天带着大家完成TFUMS系统的忘记密码功能的使用安全问题重置密码的前一部分功能的开发。使用安全问题重置密码相对比较简单了,我们只需要将用户设置过的安全问题的题目和答案取出来给用户答,如果用户能完全答对就表示用户是账号的所有者,我们就允许他来重置用户的登录密码了。验证安全问题需要注意几个问题:必须将三个问题都调出来给用户来...
介绍介绍福哥带着大家完成TFUMS的忘记密码功能的通过安全问题重置密码的后一部分功能的开发。这一部分的功能和通过绑定邮箱重置密码基本一样,福哥就不详细介绍了。大家可以对照着看【20201224】的介绍了解设计思路,基本上都是一样的设计。通过安全问题重置密码功能开发完成之后,我们的忘记密码功能就算全部完成了。随着忘记密码功能的竣工,我们...
介绍介绍福哥带着大家花费了将近40天的时间终于完成了TFUMS系统的开发。这个TFUMS系统是福哥带着大家完成的第二个PHP语言的项目,第一个PHP语言的项目是TFPHP框架。并且这个TFUMS系统是基于我们前面开发的TFPHP框架开发的。福哥想问问大家,这种从零开始的感觉是不是很爽啊?一般人带着做项目都是基于一些开源的框架进行的,而...
介绍介绍福哥今天带着大家给TFPHP框架添加一个非常重要的功能模块——TFHttpClient。在很多情况下,我们的控制器需要通过远程的方式调用接口上的数据或者功能,因为这些接口可能属于其他系统或者其他服务,从本地无法直接访问。这种通过远程方式访问接口就需要借助可以模拟浏览器进行网站访问工具对象来完成,因为网站或者平台是遵循HTTP协...
介绍介绍前几课福哥带着大家完成了安全模块的绑定邮箱功能和安全问题功能,这两个功能一般情况下是不能修改的。但是,我们在开发完这两个功能之后并没有进行“锁定”处理。也就是说,重新进入绑定邮箱表单依然可以重新操作绑定邮箱,再次进入设置安全问题表单依然可以重新操作设置安全问题。这显然是一个问题,需要我们采取一些措施。要“锁定”安全模块的表单功...
介绍介绍今天福哥带着大家给TFPHP框架的TFDO对象增加两个新方法——fetchTotal和fetchPart。这个fetchTotal方法用来获得输入SQL语句查询结果的记录集总数,而fetchPart方法用来从输入SQL语句查询结果的记录集里提取一部分记录出来。一般情况下这两个方法可以用来实现功能列表的数据分页功能,这个数据分页...
介绍介绍今天福哥带着大家给TFPHP框架增加一个新对象——TFDataPage,使用这个对象可以用来计算功能列表的分页参数。分页是一项技术,用来对功能列表里面的众多条数据记录进行分页处理。其原理是这样的,首先全部数据记录数量就是记录总数(Total);将全部数据记录根据一个固定数字进行等分处理,这个固定数字就是页长度(Page siz...
介绍介绍福哥今天要带着大家给TFPHP框架的TFModel对象进行一次大的改造,福哥要给TFModel的数据读取环节增加一个缓存层,通过这一层缓存提高系统的整体运行效率。缓存层,其实就是数据副本,在开发里面我们称之为冗余数据,它就是将数据库里的数据取出来之后放到一个高速读写介质里面存储一份。这样以后再读取数据的时候可以优先从高速读写介...
介绍介绍今天福哥带着大家给TFPHP框架的TFDO对象添加一个很棒的方法——upsert。所谓的upsert其实是两个单纯融合到一起的一个伪单词,这两个单词分别为update和insert,这是两个完全不同的操作,那么upsert方法如何将这两个操作结合到一起的呢?首先我们了解一下upsert的最终目的,它的最终目的就是要保证数据表当...
介绍介绍今天福哥带着大家给TFPHP框架的TFModel对象添加一个很棒的方法——upsert。看过前一课的童鞋应该已经了解了,这里福哥再介绍一下。所谓的upsert其实是两个单纯融合到一起的一个伪单词,这两个单词分别为update和insert,这是两个完全不同的操作,那么upsert方法如何将这两个操作结合到一起的呢?首先我们了解...
介绍介绍福哥的TFUMS项目的配置文件其实就是一个PHP程序文件,使用PHP程序文件作为项目的配置文件虽然更加灵活,但是感觉上差一点。Java项目使用XML作为项目的配置文件,XML格式可以容纳更复杂的配置参数,阅读起来也很清晰,但是PHP读取XML格式的文档有点先天不足,XML格式无法转换为PHP的数组,而且PHP解析XML格式的效...
介绍介绍上一课福哥带着大家使用TFPHP框架给TFUMS项目的标签模块的增加了回收站功能,标签可以设置子级标签,子级标签又可以设置孙级标签,但是我们的标签管理列表无法体现这样的特点。今天福哥要给标签功能增加一个面包屑功能,当我们切换到子级标签、孙级标签的时候可以通过面包屑上面的标签信息知道当前所处的标签层级位置,这个功能需要用到标签的...
介绍介绍上一课福哥带着大家使用TFPHP框架给TFUMS项目增加了全套的标签模块的增、删、改、查功能,标签的删除功能福哥使用的是状态删除方式而不是物理删除方式,为的就是那些误删除的标签可以通过恢复功能找回来,今天福哥要带着大家来实现这个恢复功能。标签模块的恢复功能和删除功能相对的,删除功能是把标签状态改为T_STATE_LOCKED,...
介绍介绍福哥今天要把TFPHP框架开发的标准CRUD功能的方法整理一遍,我们以TFUMS系统为基础,给TFUMS项目增加一个标签功能,就是可以给用户打标签的功能。福哥会把标签模块的增、删、改查功能的开发方法逐个讲解给大家听~~结构模型WEB-APP/Model/tag.inc.php控制器WEB-APP/Controller/admi...
介绍介绍福哥在将TFLinux的PHP+Apache的组合转换成PHP+FPM+Nginx的过程里遇到了一个问题,就是无法通过默认方式安装GD库。通过上网去查询发现人家说php7.4开始编译GD库的方式变了,然后给出了一个错误的Dockerfile示例(福哥非常确定那个示例是错的),你大爷的你知道旧的方式不好使了,你丫倒是给一个好使的...
介绍介绍福哥在用Python去读PHP语言开发的项目的数据库的时候,发现一些字段里存储的居然是经过PHP的serialize函数序列化过的数据,这个要解开它通过json库是不行的了,怎么办呢?原来Python专门有个库用来模拟PHP语言的serialize和unserialize的功能,它就是phpserialize库。安装phpse...
介绍介绍福哥今天要带着大家完成修改个人资料表单的功能。修改个人资料表单和注册、登录表单不同,它不仅仅是将用户填写的数据提交到服务器,还要在进入修改个人资料表单的时候将上一次填写的内容展示到表单里面。也就是说,用户可以修改其中一部分,也可以什么都不修改,用户需要知道每个表单项自己曾经填写的数据是什么。将用户填写的表单数据提交到服务器这部...
介绍介绍今天福哥带着大家来把会员中心(就是开放给登录用户的功能集中管理模块)的基础框架搭建一下。所谓的基础框架包括了会员中心的导航菜单,还有每个已知功能页面的视图模型以及功能页面的基本权限控制。这里面有个问题,就是首页应该是公开的(任何人都可以访问),而会员中心里面的功能则必须有用户登录才能操作,并且有用户登录之后login和regi...
介绍介绍福哥今天要继续制作TFUMS系统的用户登录状态的功能,上一课我们已经完成了用户登录状态的接口的开发,今天我们的目的就是要在页面上根据这个用户登录状态显示不同的界面内容,让用户可以了解到自己当前是否已经登录了。用户登录状态有两种使用场景,第一种就是在后台进行判断的,这种场景属于在后端发现用户没有登录就会直接拦截并采取措施(例如:...
介绍介绍今天福哥要带着大家做一些系统级别的调整,我们带着一个问题去了解这个系统级别的调整需要做哪些事情,今天的课程有一定难度,大家要仔细听了~~首先,我们需要在每个用户网页上面判断当前浏览器有没有用户已经登录过了,如果有登录则显示登录才能看到的内容,否则就要显示未登录状态的信息。那么如果判断登录这个逻辑在每个页面都写一遍的话,想一想都...
介绍介绍福哥今天就带着大家完成TFUMS系统的登录功能,为什么登录功能不分几集?因为在注册功能开发的过程中我们已经把表单需要准备的工具和接口都弄好了,所以今天在制作登录功能的时候一集就可以做完了。登录功能就是检验用户输入的用户名和密码是否正确,如果用户名和密码是正确的,就建立一个token。这个token里包含这登录用户的信息,但是一...
介绍介绍今天福哥打算使用TFPHP框架的TFSafeCode对象给我们的TFUMS系统的注册功能增加验证码功能,大家可以通过这个注册功能的验证码功能了解到验证码是怎么一回事、验证码的工作原理以及验证码在表单当中的作用和价值。验证码简单说就是:防止机器人模拟用户操作表单的安全防护措施。也就是说,我们给表单增加验证码机制的目的仅仅是为了避...
介绍介绍福哥今天要带着大家给我们的TFPHP框架添加一个工具对象TFSafeCode,这个工具对象是用来生成验证码和校验验证码的。验证码大家都很熟悉了,就是在诸如:注册、登录等等重要的操作时候除了表单自有的项目之外还会有一个验证码项目,这个验证码五花八门什么样式的都有,其目的就是防止黑客使用机器人模拟用户来操作这个表单。今天福哥要在T...
介绍介绍福哥今天要带着大家开发TFUMS系统的注册功能的处理程序了。这个处理程序会调用模型user的add方法进行创建用户的操作,模型user的add方法会先检查用户名是否被占用了,如果没有被占用才能进一步完成创建用户的操作,否则会报错。如果处理程序报错的话,会返回错误码和错误信息。这个错误码需要我们定义好,一般情况下错误码一个是7位...
介绍介绍Redis是一款使用内存作为存储介质的数据库。大家应该都知道,计算机最快的单元是CPU,较次之的单元就是内存,再其次才是固态硬盘,最后是传统的物理硬盘。现如今大部分笔记本电脑和台式机都已经开始采用固态硬盘作为主要存储介质了,但是服务器领域传统的物理硬盘还是主流的(毕竟几百G、甚至几个T的巨大容量固态硬盘成本太高了)。所以,Re...
介绍介绍今天我们开始开发用户管理系统项目的第一课——需求分析。需求分析就是要得出用户管理系统都包括哪些模块,这些模块是由哪些模型组成的,这些模型又拥有哪些属性,这些模型同时具有哪些功能,最后这些模型之间的关系。首先用户管理系统的主体肯定是用户,那么用户模块是一定会有的了。而说到用户模块一定会有的模型就是用户模型。接着用户模型包括的属性...