版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
牟奇春主编PHP动态网站开发项目教程(微课版)任务5会员管理系统管理员功能子任务5.1管理员登录
实现管理员登录比较通用的方法有两种。第一种方法是单独建立一张管理员数据表,其中的所有数据记录都是管理员。第二种方法是在现有的普通用户数据表中增加一列,用来标识是否是管理员。如果是管理员,则可以把这一列设置为1,如果是普通用户,则将这一列设置为0。为了处理方便,可以将此列默认值设置为0,这样,用户注册时默认注册为普通用户。
对于第一种方式,在登录时,需要单独做一个管理员登录的页面,或者在普通用户登录时,添加一组复选框,用来标识是否是管理员登录。如果是管理员登录,则后端在判断用户名和密码时,查询管理员数据表。对于第二种方式,和普通用户登录完全一样,只是在登录成功后,再判断管理员标识列的值为多少,以判断当前用户是不是管理员。
管理员登录成功后,需要单独保存一个Session标识符,用以标识管理员登录。由于Session的全局性,我们在任意页面判断是否是管理员登录,只需要检查是否存在这个Session标识符即可。5.1.1修改数据表结构以实现管理员登录
小王同学决定通过上述第二种方式来实现管理员登录。很明显,在前面创建的数据表中并无管理员标识列。因此,他必须先修改数据表。打开phpMyAdmin,找到数据表info,单击“结构”按钮,在下面的“添加1个字段”提示文字后面单击“执行”按钮,然后就和创建数据表时一样,正常添加列即可。小王添加的列名是admin,类型可以选择“tinyint”,长度为1,默认值设置为0(在默认值中选择“定义”,然后输入0即可),表示不是管理员。如果是管理员,这一列的值自然就为1。最后单击“保存”按钮完成添加。最后的info数据表结构如图5.1.1所示。图5.1.1
添加管理员标识列后的数据表结构5.1.2管理员登录后查看导航栏的变化
根据前面小王设计的系统页面,在管理员登录后,还需要在顶部的导航栏中添加一个“欢迎管理员登录”的提示信息。因此,小王同学打开nav.php文件,在显示登录者信息的区域修改了部分代码。
管理员登录后,首页如图5.1.2所示。图5.1.2
管理员登录后的页面子任务5.2管理员查看所有会员5.2.1判断管理员权限
正确的做法应该是,借鉴前面包含数据库连接文件的方法,单独制作checkAdmin.php文件,在其中通过Session来判断是否有管理员权限,然后在所有需要验证管理员权限的文件中使用include包含即可。5.2.2循环输出数据表记录
小王同学在制作导航栏时,已经给“后台管理”栏目添加了链接目标文件admin.php。因此,接下来就要制作admin.php文件了。在这个文件中需要实现查看所有会员列表的功能。制作好admin.php文件后,可以在导航栏中单击“后台管理”跳转至管理员页面。
回想一下前面实现的登录功能,不管是普通用户登录,还是管理员登录,登录成功后,都是跳转至系统首页。现在看来,这样做已经不太合适了,应该区分用户类型,如果是管理员登录成功,则直接跳转至admin.php页面;如果是普通用户登录成功,则跳转至首页即可。根据这样的思路,小王同学再次优化了登录成功后的跳转逻辑。
图5.2.1所示为管理员登录后查看所有会员列表的结果。图5.2.1
管理员查看所有会员列表5.2.3了解PHP中的循环语句
1.while循环
只要指定的条件成立(运算结果为真),就循环执行代码块。其语法规则为:while(条件){要执行的代码;}2.do...while循环
首先执行一次代码块,然后在指定的条件成立时重复这个循环。其语法规则为:do{要执行的代码;}while(条件);3.for循环
循环执行代码块指定的次数。其语法规则为:for(初始值;条件;增量){要执行的代码;}4.foreach循环
根据数组中的元素来循环代码块,也就是遍历数组,其语法规则为:foreach($arrayas$value){要执行代码;}或者:foreach($arrayas$key=>$value){要执行代码;}子任务5.3数据分页5.3.1理解分页的基本原理
分页的基本原理是,在执行数据表查询时,使用limit关键字只读取指定条数的记录。通过多次读取,最终显示所有内容。5.3.2制作分页文件
分页不光要实现后台数据的按页(指定数量)获取,还需要在前端实现分页的导航链接等相关功能。同时,分页功能也是各个系统经常使用的功能之一,可能会多次重复使用,因此,小王同学还是借鉴前面的制作方法,准备单独制作一个分页文件。这样,以后凡是需要使用分页的地方,都可以直接引入此文件来实现分页功能。5.3.3实现分页
按照下面的步骤进行操作,可快速实现数据分页。(1)在admin.php中包含page.php文件。(2)查询记录表的记录总数。(3)设置每一页显示多少条记录。(4)读取当前页码。(5)引用分页函数。(6)在SQL语句中加上limit关键字进行分页查询。(7)在末尾加上分页链接。图5.3.1
数据分页效果【知识储备】1.SQL查询中count()函数的使用(1)count(*):返回表中的记录数(包括所有列),相当于统计表的行数(不会忽略列值为NULL的记录)。(2)count(1):忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替(不会忽略列值为NULL的记录)。(3)count(列名):返回指定列名的记录数,在统计结果时,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。(4)count(distinct列名):返回指定列名的不同值的记录数(相同的记录只统计1次),在统计结果时,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内。count(id)
as
total表示获取记录总数后,以total的别名返回,所以在第13行中可以使用$info['total']来得到记录总数。2.变量作用域
在PHP中,变量是有作用域的。所谓变量作用域(VariableScope),是指特定变量在代码中可以被访问到的位置。变量必须在其有效范围内使用,如果超出有效范围,那么变量会失去其意义。
PHP中包含3种类型变量,分别是局部变量(LocalVariable)、全局变量(GlobalVariable)、静态变量(StaticVariable)。子任务5.4设置或取消管理员5.4.1修改文件静态内容5.4.2制作setAdmin.php文件5.4.3避免删除管理员admin
最终完成的设置(取消)管理员页面如图5.4.1所示。图5.4.1
设置(取消)管理员页面子任务5.5管理员删除用户5.5.1修改前端页面
5.5.2制作后端页面【素养小贴士】
一个优秀的程序员应该养成哪些良好的习惯呢?1.写代码前应该先想好思路,再规划框架,最后才是局部实现。2.注重代码风格。3.注重代码执行效率。4.解决问题时,对于原理性的问题,不要面向搜索引擎编程。5.在执行一些风险操作时,一定要仔细检查,并做好二次确认。子任务5.6管理员修改会员资料5.6.1添加资料修改链接
5.6.2修改modify.php文件
【任务小结】
在本任务中,主要是完成了管理员相关功能的实现,包括管理员的登录、查看所有会员列表、数据分页、设置或取消管理员、删除用户、修改会员资料。管理员功能和普通用户功能的区别就是,需要通过Session中保存的标识符来识别是否为管理员。牟奇春主编PHP动态网站开发项目教程(微课版)任务6会员管理系统项目优化子任务6.1优化跳转目标页面6.1.1文件跳转时添加来源参数6.1.2读取来源参数,并跳转至目标页面
子任务6.2注册时使用AJAX验证用户名是否有效6.2.1理解异步(1)同步:浏览器端提交请求→服务器处理→处理完毕返回。其间浏览器端不能干任何事。(2)异步:浏览器端的请求通过事件触发→服务器处理(这时浏览器端仍然可以做其他事情)→处理完毕,通过回调等方式完成结果处理。
AJAX就是一种典型的异步请求技术。AJAX(AsynchronousJavaScriptAndXML)翻译成中文就是“异步JavaScript和XML”技术,即使用JavaScript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用的是JSON数据)。
AJAX不是一种新的编程语言,而是一种使用现有标准的新方法。
AJAX最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容(这一特点给用户的感受是在不知不觉中完成请求和响应过程)。6.2.2初识jQuery
在Web页面中,使用AJAX的一个比较方便的方法是使用jQuery中封装好的AJAX操作。
jQuery是一个快速、简洁的JavaScript框架,于2006年1月由约翰·雷西格(JohnResig)发布。jQuery设计的宗旨是“WriteLess,DoMore”,即倡导写更少的代码,做更多的事情。它封装了JavaScript中常用的一些功能代码,提供了一种简便的JavaScript设计模式,优化了HTML文档操作、事件处理、动画设计和AJAX交互。
jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的CSS选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery可兼容各种主流浏览器。
jQuery是一种非常优秀的前端框架,在网络上可以找到很多的使用教程。jQuery自2006年诞生以来,一共发行了1.x、2.x、3.x这3个大版本。而在这3个大版本下又细分了许多小版本。这3个大版本的简单区别如下。1.IE的支持情况比较(1)情况分析1.x版本:支持IE6、IE7、IE8。2.x、3.x版本:只支持IE9及以上的版本。(2)选择建议
如果需要兼容IE6、IE7、IE8,则只能选择1.x版本。
如果不需要兼容IE6、IE7、IE8,则可以选择2.x、3.x版本。因为1.x版本中有大部分代码是针对“旧”浏览器做的兼容,所以增加了运行的负担,影响了运行效率。2.插件的支持情况比较(1)情况分析
jQuery的版本都是不向后兼容的,导致基于jQuery开发的插件会有兼容性问题。也就是说,当新版本的jQuery推出后,原有的插件可能无法正常使用,需要插件作者重新开发新版本。(2)选择建议
为了保证与各种插件有更好的兼容性,可以选择1.x版本。3.新特性比较(1)2.x版本相较于1.x版本没有增加什么新特性,主要是去除了对IE6、IE7、IE8的支持,从而提升了性能,减小了体积。(2)3.x版本相较于之前的版本,增加了许多新特性,也改变了一些以往的特性,具体内容可以查阅网络上的相关资料。6.2.3引入jQuery库文件
6.2.4在表单中添加事件
6.2.5实现方法checkUsername()
6.2.6使用jQuery中封装的AJAX
6.2.7制作AJAX后端文件
由于系统中已经有一个用户名是admin的用户了,如果输入这个用户名来注册,则当鼠标光标离开用户名控件时,在用户名控件后面显示绿色的“此用户名不可用”的提示信息,如图6.2.1所示。
在用户名控件中输入admin1,确保是一个新的未被使用过的用户名,当再次失去焦点时,会在用户名控件后面显示黑色的“此用户名可用”的提示,如图6.2.2所示。图6.2.1
用户名不可用的效果图
图6.2.2
用户名可用的效果图6.2.8在Chrome浏览器中调试网络通信
(1)按“F12”键,可以打开或关闭浏览器“开发者工具”。在开发者工具中单击上面“网络”选项卡,然后把鼠标光标移至用户名文本框中,再单击其他地方让用户名控件失去焦点,此时,可以清楚地看到在“网络”面板中出现一条网络请求,如图6.2.3所示。在名称一栏将显示具体请求的目标网址,并显示状态、类型等。这个状态默认是请求成功后返回的200。如果请求的文件不存在,则返回404。具体的HTTP状态码有很多,大家可以查询相关资料进一步了解。图6.2.3
在开发者工具中查看网络请求(2)在查看网络请求时,默认会显示请求图片、JavaScript文件、CSS文件等所有的网络请求,而我们在使用AJAX时,只关心异步请求后端接口文件的情况,因此,我们可以单击“过滤”选项中的“Fetch/XHR”进行网络请求的过滤显示。(3)在网络请求面板中单击“checkUsername.php”文件,在右边会显示这一次网络请求的详情,图6.2.4中显示的是“预览”选项卡中的内容,其中会显示后端文件返回的结果。可以看到,这里返回的是一个JSON对象,其中包括code和msg两个属性。图6.2.4
查看网络请求详情(4)单击“标头”选项卡,可以查看这一次网络请求的响应标志头、请求标志头等详情,当访问后端文件出现问题时,这个选项卡中的内容可以帮助我们查询请求的各种标志头等信息,有利于判断问题之所在。在“载荷”选项卡中可以看到前端传递给后端的具体参数。子任务6.3beforeSend的使用
使用AJAX方式的优势很明显,即在页面不刷新的情况下,可以直接更新页面内容,使得用户体验更好。但由于不是同步操作,所以如果网络较慢等情况导致更新延迟,用户体验就会大打折扣。为了解决这个问题,AJAX提供了一个beforeSend回调函数,在发起请求时,可以在页面中显示加载中(loading)图标,给用户明确的提示,这样用户体验会更好。
当用户名文本框失去焦点时,执行AJAX程序,向后端发起请求。这个请求发起后要后端程序执行结束,并返回结果以后,前端页面才会执行相应的更新。在使用jQuery的AJAX时,可以在complete、success、error这3个回调函数中进行处理,也就是说,当后端程序执行完毕,并将结果返回给前端后,complete回调一定会执行。
如果执行成功,则还会执行success回调,如果执行失败,则执行error回调。在发起请求之前,执行beforeSend回调。因此,可以在beforeSend中显示一个加载中图标,在complete、success、error中隐藏加载中图标。子任务6.4登录时使用AJAX判断用户名是否有效6.4.1修改login.php文件6.4.2显示异步登录的效果
完成相关代码后,小王同学测试了最终的结果。图6.4.1所示是输入正常的用户名后,异步查询显示“√”的结果。
图6.4.2所示是输入不存在的用户名后,异步查询显示“×”的结果。
图6.4.1
输入用户名正确
图6.4.2
输入用户名错误子任务6.5验证码的使用【知识储备】1.验证码简介
什么是验证码?验证码CAPTCHA是“CompletelyAutomatedPublicTuringtesttotellComputersandHumansApart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。验证码这个词最早于2002年由美国卡内基梅隆大学的路易斯·冯·安(LuisvonAhn)等人提出。
卡内基梅隆大学曾试图申请此词为注册商标,但该申请于2008年4月21日被拒绝。一种常用的CAPTCHA是让用户输入一张扭曲变形的图片上显示的文字或数字,使图片扭曲变形是为了避免被光学字符识别(OpticalCharacterRecognition,OCR)之类的计算机程序自动辨识出图片上的文字、数字而失去效果。由于这个测试是由计算机来考验人类,而不是像标准图灵测试中那样由人类来考验计算机,所以人们有时称CAPTCHA是一种反向图灵测试。2.验证码的类型
常见的验证码类型有图像类型、语音类型、视频类型、短信类型等。图6.5.1所示为一个典型的图像类型的验证码。图6.5.1
图像类型的验证码3.验证码的作用(1)防止恶意破解密码。例如,一些黑客为了获取用户信息,通过不同的手段向服务器发送数据,猜测用户的信息。(2)防止恶意刷票、论坛“灌水”。以论坛为例,可能会存在某些用户连续不停地发布一些无意义的帖子。使用验证码可以降低用户发布的频率,同时可以避免使用机器人发帖。结合程序其他功能的限制,可以防止恶意刷票和论坛“灌水”。(3)防止恶意请求。例如,用户提交一个表单信息,通过不断向后台请求数据信息造成服务器资源浪费,以及恶意攻击。(4)提高趣味性。如果能在网站中设计一些有趣的验证码方式,则也能在一定程度上提高用户对网站的喜爱程度。(5)获取用户信息。这一点在目前的网站中已经屡见不鲜了。例如,我们注册一个网站的账号,需要通过手机验证码才可以注册成功。6.5.1安装GD库
要在PHP中使用验证码,必须先保证PHP的GD扩展库(简称GD库)已经打开。GD库(也可以称为GD2函数库)是一个开源的用于创建图像的函数库,该函数库由C语言编写,可以在Perl、PHP等多种语言中使用。GD库提供了一系列用来处理图片的API,使用GD库可以处理图片、生成图片,也可以给图片加水印等。
安装PHP以后,默认已经包含很多的扩展。通过安装扩展可以实现更多的功能。
以小皮面板为例,安装好小皮面板以后,在“D:\phpstudy_pro\
Extensions\php\php7.3.4nts\ext”目录下存放了PHP的各种扩展文件,如图6.5.2所示。要安装新的扩展,只需要将扩展文件(DLL文件)复制到这个目录中,然后在php.ini文件中添加即可。要开启或关闭小皮面板自带的扩展,打开小皮面板的“网站”面板,然后在具体的某一个网站上单击“管理”→“php扩展”命令,再选择某个扩展进行管理即可,如图6.5.3所示。
图6.5.3中的“gd2”就是PHP的GD库,对应的文件是php_gd2.
dll。此时,如果打开小皮面板的“设置”→“配置文件”→“php.ini”,然后在其中搜索“gd2”,就可以看到“extension=gd2”,这表示已经开启了GD库。要关闭某个扩展,只需要在这一行前面添加一个分号(表示注释)即可,如图6.5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 私人退款合同范例
- 2024【建设工程技术咨询合同】河南平业建设工程技术咨询有限公司
- 2024上海市旧机动车委托(出售)合同
- 汽车外借租赁合同范例
- 2024年春季学期学校工作计划(5篇)
- 2024劳动合同关系解除协议书(无固定期劳动合同)
- 2024栏杆工程合同书
- 电动雨棚租赁合同范例
- 2024年学校总务处工作总结(3篇)
- 幼儿元旦节主题活动方案(2篇)
- 2024年小学体育新课标测评考试题库(含答案)
- 湖北省十堰市第二中学2024-2025学年七年级上学期期中考试语文试题(含答案)
- 部编 2024版历史七年级上册期末(全册)复习卷(后附答案及解析)
- 护理病侵入性肺曲霉菌病案临床病例呼吸科
- 《篮球移动技术 行进间传球》教案(共三篇)
- 2024年中职高考数学计算训练 专题15 圆锥曲线的基本计算(含答案解析)
- 江苏省海绵型道路建设与运行维护指南
- 眼镜验光员(二级)技能鉴定考试题及答案
- 期中试卷(1-5单元)(试题)-2024-2025学年五年级上册数学苏教版
- 人工智能岗位招聘笔试题及解答(某大型央企)2025年
- 关于粤菜的课件
评论
0/150
提交评论