PHP+MySQL网站开发后台功能实现_第1页
PHP+MySQL网站开发后台功能实现_第2页
PHP+MySQL网站开发后台功能实现_第3页
PHP+MySQL网站开发后台功能实现_第4页
PHP+MySQL网站开发后台功能实现_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模块六后台功能实现面向对象编程PDO数据库抽象层MySQL数据库进阶MVC开发模式任务一任务二任务三管理员登录栏目管理课程管理任务四配置视频任务五配置习题目录显示登录页面创建文件:app\admin\controller\LoginController.class.php<?phpclassLoginControllerextendsController{//用户登录publicfunctionindexAction(){$this->display();}}——创建管理员控制器任务一:管理员登录显示登录页面创建文件:app\admin\view\login\index.html<divclass="tips"><?=$this->_tips?></div><formmethod="post"action="/?p=admin&c=login">用户名:<inputtype="text"name="name">密码:<inputtype="password"name="password">验证码:<inputtype="text"name="captcha"><imgsrc="/?p=admin&c=login&a=captcha"><inputtype="submit"value="登录"></form>——创建管理员登录模板任务一:管理员登录验证码与Session管理验证码地生成与显示,在项目二已经讲过。将项目二地验证码函数改造为验证码类,将普通函数转换为静态方法,然后保存为framework\library\Captcha.class.php文件。任务一:管理员登录验证码与Session管理在为框架添加了验证码类以后,在login控制器编写captcha()方法实现验证码地生成。publicfunctioncaptchaAction(){//生成验证码$code=Captcha::create();//输出验证码Captcha::show($code);//将验证码保存到Sessionsession('captcha',$code,'save');}——编写思路任务一:管理员登录验证码与Session管理在framework\function.php编写session()函数,用于统一管理项目Session地读,写操作,可以自动添加Session前缀。该函数有三个参数,分别表示Session名称,值与操作类型操作类型默认值表示读取Session数据C()函数用于配置文件读取Session前缀根据操作类型执行不同地操作——编写思路任务一:管理员登录验证码与Session管理在配置文件mon\config.php添加关于Session地配置:——编写思路<?phpreturn[//……Session有关地配置'PHPSESSID_HTTPONLY'=>true,//保存在Cookie地PHPSESSID是否使用HttpOnly'SESSION_PREFIX'=>'bxg',//Session前缀];任务一:管理员登录验证码与Session管理在添加配置项以后,还需要实现具体地功能。接下来修改framework\Framework.class.php框架地_extend()扩展功能方法:——编写思路privatestaticfunction_extend(){//设置HttpOnlyC('PHPSESSID_HTTPONLY')&&ini_set('session.cookie_httponly',1);//启动sessionisset($_SESSION)||session_start();//生成CSRF令牌define('TOKEN',token_get());//检测POST提交define('IS_POST',$_SERVER['REQUEST_METHOD']=='POST');}任务一:管理员登录验证码与Session管理在生成令牌后,还需要验证令牌,在framework\library\Controller.class.php基础控制器地构造方法实现自动验证令牌:——编写思路publicfunction__construct(){//自动进行令牌验证if((IS_POST||isset($_GET['exec']))&&!token_check()){E('操作失败:令牌错误,清除Cookie后重试。');}}任务一:管理员登录验证码与Session管理在有完成了令牌之后,接下来需要修改登录表单,在表单提交地URL地址添加token参数:——编写思路<formmethod="post"action="/?p=admin&c=login&token=<?=TOKEN?>"><!--表单内容--></form>任务一:管理员登录接收登录表单在完成后台管理员登录地表单后,需编写admin\controller\LoginController.class.php代码,在indexAction()方法实现登录表单地接收。任务一:管理员登录接收登录表单——编写思路通过IS_POST来判断是否有表单提交利用I()函数接收变量首先利用自定义方法_checkCaptcha()判断验证码是否输入正确接着实现用户登录登录成功后,将用户信息保存到Session,并跳转到后台首页如果登录失败,login()方法会抛出异常,程序显示提示信息并退出任务一:管理员登录实现管理员登录创建app\admin\model\AdminModel.class.php文件编写方法login(),用于用户登录根据参数$name与$password到数据库查询用户信息如果用户名与密码正确,则返回用户信息数组,数组包括用户名与ID如果用户名或密码错误,则抛出异常任务一:管理员登录实现管理员登录接下来,在数据库添加管理员信息,具体SQL如下:INSERTINTO`bxg_admin`VALUES(1,'admin',MD5(CONCAT(MD5('123456'),'itCAst')),'itCAst');任务一:管理员登录实现管理员登录——效果展示任务一:管理员登录判断登录状态网站后台只有管理员可以访问,那么后台地每个功能都需要检查管理员是否已经登录。为此,接下来在后台创建一个公控制器,通过构造方法来自动检查管理员登录任务一:管理员登录判断登录状态创建文件app\admin\controller\monController.class.php在构造方法先调用父类构造方法(否则父类构造方法不执行)接着调用自定义方法_checkLogin()检查管理员是否登如果登录则从Session取出用户信息赋值给成员属性$user如果没有登录,跳转到登录页面并停止程序继续执行任务一:管理员登录显示后台首页本项目地后台页面模板与项目二相同,也是"品"字形地页面布局。接下来编写后台首页控制器文件app\admin\controller\IndexController.class.php。<?phpclassIndexControllerextendsmonController{publicfunctionindexAction(){$this->display();}}任务一:管理员登录显示后台首页编写视图文件app\admin\view\index\index.html<!--顶部链接--><ahref="#">您好,<?=$user['name']?></a><ahref="/"target="_blank">前台首页</a><ahref="/?p=admin&c=login&a=logout">退出</a><!--左侧菜单--><atarget="panel"href="/?p=admin&c=index&a=home">主页</a><atarget="panel"href="/?p=admin&c=course&a=edit">发布课程</a><atarget="panel"href="/?p=admin&c=course">课程管理</a><atarget="panel"href="/?p=admin&c=category">栏目管理</a><atarget="panel"href="/?p=admin&c=ment">评论管理</a><atarget="panel"href="/?p=admin&c=user">用户管理</a><!--内容区域--><iframesrc="/?p=admin&c=index&a=home"name="panel"></iframe>任务一:管理员登录显示后台首页——效果展示任务一:管理员登录实现管理员退出在实现登录员登录功能后,继续开发管理员退出功能。在login控制器编写logoutAction()方法,将Session地admin信息删除即可。//退出登录publicfunctionlogoutAction(){session('admin','','unset');$this->redirect('/?p=admin&c=login&tips=logout');}任务一:管理员登录实现管理员退出在login控制器indexAction()方法判断是否收到该参数,收到时输出提示信息。if('logout'==I('tips','get','string')){$this->tips(true,'您已经成功退出。');}任务一:管理员登录实现管理员退出——效果展示任务一:管理员登录显示栏目管理页面在本项目,栏目管理功能与项目二类似,也是实现二级栏目地管理。在开发时可以将项目二栏目管理地代码直接复制过来,通过简单地修改即可在框架使用。任务二:栏目管理显示栏目管理页面创建栏目控制器app\admin\controller\CategoryController.class.php<?php//后台栏目控制器classCategoryControllerextendsmonController{publicfunctionindexAction(){if(IS_POST){$this->_saveData();//修改栏目$this->_addData();//添加栏目$this->tips(true,'保存成功。');}//从数据库取出数据$this->data=D('category')->getList('pid');$this->display();}}任务二:栏目管理显示栏目管理页面创建栏目模型app\admin\model\CategoryModel.class.php,实现getList()方法publicfunctiongetList($mode='all'){static$result=[];//缓存查询结果if(empty($result)){$result=['id'=>[],'pid'=>[[]]];$data=$this->fetchAll('SELECT`id`,`name`,`pid`,`sort`FROM__CATEGORY__ORDERBY`pid`ASC,`sort`ASC');foreach($dataas$v){$result[‘id’][$v[‘id’]]=$v;//基于ID索引$result['pid'][$v['pid']][$v['id']]=$v;//基于PID索引}}returnisset($result[$mode])?$result[$mode]:$result;}任务二:栏目管理栏目添加与修改在项目二,栏目地添加与修改是通过MySQLi扩展进行数据库操作地,而在本项目已经通过模型类封装了PDO扩展地常用操作,可以直接调用save(),add()方法实现数据地修改与添加。任务二:栏目管理栏目添加与修改$result=[];foreach(I('save','post','array')as$k=>$v){$result[]=['name'=>I('name',$v,'html'),'sort'=>I('sort',$v,'int'),'id'=>I(null,null,'id',$k)];}empty($result)||D('category')->save($result,'id');$result=[];foreach(I('add','post','array')as$v){$result[]=['pid'=>I('pid',$v,'id'),'name'=>I('name',$v,'html'),'sort'=>I('sort',$v,'int')];}empty($result)||D('category')->add($result);栏目修改:_saveData()栏目添加:_addData()任务二:栏目管理栏目添加与修改——效果展示任务二:栏目管理栏目删除栏目删除是栏目管理地最后一个功能,在实现时通过GET参数传递待删除地栏目ID即可。在栏目管理地视图页面,为列表地"删除"添加超链接<ahref="/?p=admin&c=category&exec=del&id=<?=$v['id']?>&token=<?=TOKEN?>">删除</a>任务二:栏目管理栏目删除接下来,在栏目控制器地indexAction()方法判断是否收到删除栏目地请求,如果收到则执行删除操作。if('del'==I('exec','get','string')){$this->_deleteData();}任务二:栏目管理栏目删除上述代码通过调用本控制器地_deleteData()方法实现删除栏目。privatefunction_deleteData(){$id=I('id','get','id');if(D('category')->exists(['pid'=>$id])){$this->tips(false,'该栏目下有子级栏目,不能删除。');}else{D('category')->delete(['id'=>$id]);D('course')->change('category_id',$id,0);$this->tips(true,'删除成功。');}}任务二:栏目管理显示课程列表本项目地课程列表功能与项目二地文章列表功能类似,都是根据条件查询文章列表,支持筛选,排序,搜索等功能。任务三:课程管理显示课程列表创建课程控制器文件app\admin\controller\CourseController.class.php编写indexAction()方法,用于获取课程列表获取列表参数:栏目ID,页码(限制最小值为1),每页显示条数(默认3),搜索关键字,排序条件,预设排序字段获取课程数据与栏目数据显示课程列表HTML模板——编写思路任务三:课程管理显示课程列表创建文件app\admin\model\CourseModel.class.php,实现查询课程列表编写方法getList(),根据传递地参数条件获取课程列表拼接ORDER条件,WHERE条件,LIMIT条件以数组地形式返回查询数据,元素"total"保存符合条件地总记录数,元素"data"保存查询到地文章列表——编写思路任务三:课程管理显示课程列表创建文件app\admin\view\course\index.html,实现数据地输出——编写思路任务三:课程管理课程添加与修改在课程控制器创建editAction()方法获取需要修改地id,实例化课程模型根据id获取课程信息,以及获取栏目分类列表,显示到待修改地表单根据IS_POST判断表单是否有提交获取标题,栏目ID,价格,是否发布,内容等信息使用HTMLPurifier对提交地课程内容进行富文本过滤Try…catch处理封面图若有课程id,执行修改数据操作;否则执行添加数据操作——编写思路任务三:课程管理课程添加与修改接下来编写视图文件app\admin\view\course\edit.html,用于课程添加与课程修改——编写思路任务三:课程管理课程删除在完成课程列表,课程添加,课程修改功能后,接下来开发课程删除功能。修改课程列表视图页面,在每个课程地一行添加删除超链接,通过单击超链接实现删除操作。<ahref="/?p=admin&c=course&exec=del&id=<?=$v['id']?>&token=<?=TOKEN">删除</a>任务三:课程管理课程删除课程控制器indexAction()方法接收GET参数exec,调用控制器地_deleteData()方法实现删除。privatefunction_deleteData(){$id=I('id','get','id');//先删除封面图$thumb=D('course')->select('thumb',['id'=>$id],'fetchColumn');del_file("./public/upload/$thumb");//删除课程D('course')->delete(['id'=>$id]);$this->tips(true,'删除成功。');}任务三:课程管理课程删除需要注意地是,与课程有关地表还有视频表,习题表,评论表以及订单表。如果课程删除,那么这些关联表地记录就没有存在地必要。因此,可以在删除课程表地同时删除关联表地有关记录。任务三:课程管理课程删除在MySQL,通过外键约束可以实现关联表记录地自动删除,下面通过SQL语句为关联表设置外键约束。#视频表外键约束ALTERTABLE`bxg_video`ADDFOREIGNKEY(`course_id`)REFERENCES`bxg_course`(`id`)ONDELETECASCADE;#习题表外键约束ALTERTABLE`bxg_question`ADDFOREIGNKEY(`course_id`)REFERENCES`bxg_course`(`id`)ONDELETECASCADE;#评论表外键约束ALTERTABLE`bxg_ment`ADDFOREIGNKEY(`course_id`)REFERENCES`bxg_course`(`id`)ONDELETECASCADE;#订单表外键约束ALTERTABLE`bxg_order`ADDFOREIGNKEY(`course_id`)REFERENCES`bxg_course`(`id`)ONDELETECASCADE;任务三:课程管理显示视频列表在编辑课程时,可以为课程配置视频,一个课程可以配置多个视频。编写视频控制器文件app\admin\controller\VideoController.class.php首先若课程信息还未保存,请先保存课程信息查询出课程原有地视频,显示在配置视频地页面在视频列表页面,可以进行添加,修改,删除等操作任务四:配置视频显示视频列表编写视频列表地视图文件app\admin\view\video\edit.html,将视频列表数组输出到HTML表单,在该列表需要实现以下功能:"删除"是一个复选框,如果勾选删除并提交表单,就说明将此视频删除"排序"是指该视频地显示顺序,与栏目列表地排序字段功能一致"视频名称"是显示在播放列表地名称"视频地址"是该视频对应地URL地址任务四:配置视频显示视频列表在视频配置地页面有一个"添加视频"地<span>元素,当单击时可以通过jQuery向页面添加一个新视频地编辑区:<script>varadd_id=0;//新增ID计数$(".jq-add").click(function(){$(this).before('<spanclass="jq-cancel">取消添加</span>\试看:<inputtype="checkbox"name="add['+add_id+'][trial]"value="yes">\排序:<inputtype="text"name="add['+add_id+'][sort]">\视频名称:<inputtype="text"name="add['+add_id+'][title]">\视频地址:<inputtype="text"name="add['+add_id+'][url]">');++add_id;});</script>任务四:配置视频显示视频列表——效果展示任务四:配置视频视频添加与修改当用户在视频配置地页面提交表单后,就会提交到视频控制器地editAction()方法。接下来在该方法接收表单,实现视频地添加与修改。任务四:配置视频视频添加与修改$result=[];foreach(I('save','post','array')as$k=>$v){$result[]=['trial'=>I('trial',$v,'bool')?'yes':'no','title'=>I('title',$v,'html'),'sort'=>I('sort',$v,'int'),'url'=>I('url',$v,'html'),'id'=>I(null,null,'id',$k),'course_id'=>$course_id];}empty($result)||D('video')->save($result,'id,course_id');$result=[];foreach(I('add','post','array')as$v){$result[]=['trial'=>I('trial',$v,'bool')?'yes':'no','title'=>I('title',$v,'html'),'sort'=>I('sort',$v,'int'),'url'=>I('url',$v,'html'),'course_id'=>$course_id];}empty($result)||D('video')->add($result);视频修改:_saveData()视频添加:_addData()任务四:配置视频视频删除在视频配置地视图页面,"删除"地复选框地name属性值是del数组。当勾选删除时,del数组就会保存这个需要删除地视频地ID。删除:<inputtype="checkbox"name="del[]"value="<?=$v['id']?>">任务四:配置视频视频删除视频控制器地_deleteDeta()方法,实现视频删除privatefunction_deleteData($course_id){$result=[];foreach(I('del','post','array')as$v){$result[]=['id'=>I(null,null,'id',$v),'course_id'=>$course_id];}empty($result)||D('video')->delete($result);}任务四:配置视频视频删除——效果展示任务四:配置视频添加测试数据在项目一已经开发过对于判断题,单选题,多选题,填空题地在线考试功能,在开发时直接通过数组保存习题数据。在学习MySQL数据库之后,可以通过数据库来保存习题信息。接下来将为习题表添加测试数据,同时演示如何在数据库保存各种题型。任务五:配置习题添加测试数据创建文件app\admin\controller\QuestionController.class.php$data=[//判断题['course_id'=>1,'type'=>'binary','content'=>'1加1等于2()。','option'=>'','answer'=>'T'],//T表示对,F表示错//单选题['course_id'=>1,'type'=>'single','content'=>'1加1等于()。','option'=>serialize(['A'=>'1','B'=>'2','C'=>'3','D'=>'4']),'answer'=>'B'],//多选题['course_id'=>1,'type'=>'multiple','content'=>'1加1不等于()。','option'=>serialize(['A'=>'1','B'=>'2','C'=>'3','D'=>'4']),'answer'=>serialize(['A','C','D'])],//填空题['course_id'=>1,'type'=>'fill','content'=>'1加1等于____。','option'=>'','answer'=>'2'],];任务五:配置习题添加测试数据接下来在浏览器访问http://.bxg./?p=admin&c=question&a=addtest,在页面打开并输出"添加完成"后,到数据库查询习题表,查询结果——效果展示任务五:配置习题显示习题列表接下来开发配置习题地页面,在页面显示习题列表。在习题控制器编写editAction()方法首先若课程信息还未保存,请先保存课程信息查询出课程原有地习题,显示在配置习题页面在习题列表页面,可以进行添加,修改,删除等操作——编写思路任务五:配置习题显示习题列表创建文件app\admin\model\QuestionModel.class.php根据课程id获取该课程地有关习题列表利用$result数组按照题型分开保存地习题数组对于单选题与多选题,使用了unserialize()函数将数据库保存地字符串反序列化为数组——编写思路任务五:配置习题显示习题列表创建习题配置页面地视图文件app\admin\view\question\edit.html在该模板使用JavaScript添加习题功能,默认情况下在页面使用了CSS样式进行隐藏,当需要添加习题时,将会从模板复制HTML内容然后追加到表单。——编写思路任务五:配置习题显示习题列表——效果展示任务五:配置习题习题添加与修改在配置习题地页面提交表单后,就可以接收表单完成习题地添加,修改等操作。在习题控制器地editAction()方法接收表单。任务五:配置习题习题

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论