• 基于PHP的编程类学习网站设计与实现


    目 录
    摘要 1
    关键词 1
    1 基于PHP的编程类学习网站设计与实现 1
    1.1 研究目的和研究意义 1
    1.2 研究现状和发展趋势 2
    1.3 本文研究内容 2
    1.4 本章小结 2
    2 开发语言与技术简介 2
    2.1 HTML 2
    2.2 CSS 2
    2.3 JavaScript 3
    2.4 jQuery和ajax 3
    2.5 Bootstrap 3
    2.6 Python和爬虫 3
    2.7 PHP和Laravel 3
    2.8 本章小结 3
    3 网站分析和设计 4
    3.1 网站需求分析 4
    3.1.1 网站功能需求 4
    3.1.2 网站性能需求 5
    3.2 用例模型 5
    3.2.1网站模型角色的确定 5
    3.3 开发环境 7
    3.4 整体功能分析 7
    3.4.1 程序功能分析 7
    3.4.2 程序流程分析 8
    3.5 本章小结 10
    4 系统详细设计与功能实现 11
    4.1 数据库设计 11
    4.1.1 数据库分析 11
    4.1.2 数据库概念设计 11
    4.1.3 数据库表 12
    4.2 前端设计 14
    4.2.1 用户注册页 14
    4.2.2 用户登录页 15
    4.2.3 首页 15
    4.2.4 课程页 17
    4.2.5 课件页 17
    4.2.6 评论页 18
    4.2.7 问答页 19
    4.2.8 友情链接页 19
    4.2.9 个人信息编辑页 20
    4.3 后端设计 20
    4.3.1 课程管理页 20
    4.3.2 课程编辑页 21
    4.3.3 课件添加页 21
    4.3.4 网站配置页 22
    4.4 本章小结 22
    5 总结 23
    5.1 工作总结 23
    5.2 后续发展 23
    致谢 23
    参考文献 23

    1.3 本文研究内容
    本文研究的是如何制作一个编程类的慕课网站,让用户可以有效的学到编程技术,它可以学习课件,评论课程或课件,发表提问,还可以记笔记,在线编程等功能。它会使用多种Web技术,这将在第二章开发语言与技术简介中详细介绍,网站的系统分析与设计,会在第三章中详细介绍,具体的实现会在第四章中介绍,最后第五章是全文的总结,和对网站以后的展望,基本本文的研究方式就是如此。
    1.4 本章小结
    本章介绍了本文的研究目的和研究意义,然后了解了目前编程类慕课网站的研究现状和以后的发展趋势,最后说明了本文的研究方式,综上详细的了解了本站的建设背景。
    2 开发语言与技术简介
    该慕课网站使用到了多种Web技术,前端使用了HTML+CSS+JavaScript+ jQuery + Bootstrap,后端使用了PHP+Laravel+Python,在这些技术的搭配下,开发出一个完善的慕课网站,下面就依次介绍这些技术。
    2.1 HTML
    HTML即超文本标记语言,它通过标记符号来定义网页的各个部分,告诉浏览器该如何显示网页,可能很多人不认为这是一门编程语言,但这却是编写网页最重要的基础。目前HTML5已基本普及,各大浏览器厂商在最新的版本中都对HTML5中的新特性给予了支持,开发时只需简单的调下兼容性就可以在各大主流浏览器正常运行。
    2.2 CSS
    CSS即层叠样式表,英文名为Cascading Style Sheets,主要是用来定义网页上的样式,正是在CSS的美化下,能让一个网页看上去排版工整,赏心悦目,而且CSS还可以定义动画等。目前最新的CSS版本是CSS3,和HTML5一样,也有很多新特性,比如圆角表格、文字特效、动画属性、0更多的CSS选择器等等。
    2.3 JavaScript
    JavaScript是一种动态的脚本语言,运行在浏览器上,需要JavaScript解释器解释后才可运行。目前JavaScript广泛应用于Web应用开发中,用以来制作动态效果,而且也可以分担一些服务端的压力,因为可以在客户端页面中执行一些操作,在不发生网络请求的情况下,可谓是非常快捷便利。而且目前JavaScript的发展势头非常好,是因特网上最流行的脚本语言,用在数以百千万计的网页中,实现多种页面功能。
    2.4 jQuery和ajax
    jQuery是一个快而简的JavaScript框架,将许多JavaScript编写起来相对复杂的功能都封装了,使开发者用起来非常方便,大大的简化了JavaScript编程。而且学习起来也比较容易,语法简练,它的设计理念就是如此write less,do more,这在实际编程中就深有体会。并且在jQuery之上还有许多插件可供使用,它们是基于jQuery实现了多种多样的动态效果和功能。做出来的页面更加生动,交互更加人性化。
    ajax即异步JavaScript和XML,用以快速建立动态页面。jQuery库中就有一套完整的执行异步请求函数,使我们想异步加载传输数据更加便利,我们可以在页面不刷新的情况下完成各种各样的操作,而这正是我们非常需要的,我们也会大量的使用这种技术。
    2.5 Bootstrap
    Bootstrap是一个前端框架,它来自Twitter的两位工程师,基于HTML、CSS、JavaScript,是时下最流行使用最广泛的前端框架。Bootstrap有CSS样式和JavaScript组件两大部分,常用的有栅格系统、表单、表格、模态框、按钮等,这些组件对前端编程有莫大的帮助,能够帮助开发人员快速建立一个美观的页面。
    2.6 Python和爬虫
    Python是一种面向对象的计算机编程语言,语法相对于其他计算机语言更加简练,再加上时下有大量的Python库可以使用,用以来写爬虫非常便利,本站就是使用RequestsBeautifulSoup,分别获取页面内容和解析页面内容,然后保存到数据库中作为网站的原始数据,并且这样一套流程,能用很短的代码就可以实现,可谓是非常好用。
    2.7 PHP和Laravel
    PHP是一种开源的脚本语言,也是时下最流行的Web后端编程语言。PHP的代码常嵌入到HTML内运行,使用起来相对简单方便,而且最新版的PHP7执行速度相较于上一代提升了一倍有余,再加上与MySQL的合理搭配,本文转载自http://www.biyezuopin.vip/onews.asp?id=14787开发网站非常合适。
    Laravel是一个PHP框架,它的理念是简洁、优雅,代码可读性高,开发速度快,而且目前Laravel作为国外最流行的PHP框架,社区活跃,文档丰富。其提供了许多好用的功能,比如中间件、Artisan命令行、安全认证、事件系统、Eloquent ORM等,这是一个非常强大的PHP Web框架。

    k]=$rec->value;
    		}
    		return $configArray;
    	}
    	/*
    	 * 路由过来的/discuss
    	 * 返回:讨论交流视图
    	 */
    	function discuss(){
    		$sharePaginate=$this->getSharePaginate();
    		return view('Tool/discuss',['config'=>$this->getConfig(),'sharePaginate'=>$sharePaginate]);
    	}
    	//获取分页
    	function getSharePaginate(){
    		$config=$this->getConfig();
    		$paginateCount=$config['paginateCount'];
    		$shareList= DB::table('tool_share')->paginate($paginateCount);
    		return $shareList;
    	}
    	 
    	/*
    	 * 路由过来的/login
    	 * 返回:管理员登录页面
    	 */
    	 function login(){
    	 	$sharePaginate=$this->getSharePaginate();
    		return view('Tool/login',['config'=>$this->getConfig(),'sharePaginate'=>$sharePaginate]);
    	 }
    	 
    	/*
    	 * 路由过来的/admin
    	 * 返回:管理页面
    	 */
    	 function admin(){
    	 	$sharePaginate=$this->getSharePaginate();
    		return view('Tool/admin',['config'=>$this->getConfig(),'sharePaginate'=>$sharePaginate]);
    	 }
    	 
    	 /*
    	  * 路由post过来的/admin/{func}
    	  * 返回:ajax网站配置数据是否修改成功
    	  */
    	 
    	 function adminFunction($func){
    	 	$data=Input::all();
    		if($func=='global'){
    			$title=htmlentities($data['title']);
    			$key=htmlentities($data['key']);
    			$des=htmlentities($data['des']);
    			$icon=htmlentities($data['icon']);
    			$version=htmlentities($data['version']);
    			$cnzz=htmlentities($data['cnzz']);
    			$headAddCode=htmlentities($data['headAddCode']);
    			$res=$this->setConfigGlobal($title,$key,$des,$icon,$version,$cnzz,$headAddCode);
    			echo $res?'1':'0';
    		}else if($func=='index'){
    			$indexMessage=htmlentities($data['indexMessage']);
    			$indexBarragerImg=htmlentities($data['indexBarragerImg']);
    			$indexBarragerInfo=htmlentities($data['indexBarragerInfo']);
    			$indexBarragerLink=htmlentities($data['indexBarragerLink']);
    			$res=$this->setConfigIndex($indexMessage,$indexBarragerImg,$indexBarragerInfo,$indexBarragerLink);
    			echo $res?'1':'0';
    		}else if($func=='foot'){
    			$footDes=htmlentities($data['footDes']);
    			$footRecord=htmlentities($data['footRecord']);
    			$footEmail=htmlentities($data['footEmail']);
    			$footCopy=htmlentities($data['footCopy']);
    			$res=$this->setConfigFoot($footDes,$footRecord,$footEmail,$footCopy);
    			echo $res?'1':'0';
    		}else if($func=='editor'){
    			$editorTitle=htmlentities($data['editorTitle']);
    			$editorTheme=htmlentities($data['editorTheme']);
    			$editorHeight=htmlentities($data['editorHeight']);
    			$res=$this->setConfigEditor($editorTitle,$editorTheme,$editorHeight);
    			echo $res?'1':'0';
    		}else if($func=='list'){
    			$defaultTitle=htmlentities($data['defaultTitle']);
    			$paginateCount=htmlentities($data['paginateCount']);
    			$listCodeLength=htmlentities($data['listCodeLength']);
    			$res=$this->setConfigList($defaultTitle,$paginateCount,$listCodeLength);
    			echo $res?'1':'0';
    		}
    		
    	 }
    	function setConfigGlobal($title,$key,$des,$icon,$version,$cnzz,$headAddCode){
    		$res1=DB::table('tool_config')->where('k', 'title')->update(['value' => $title]);
    		$res2=DB::table('tool_config')->where('k', 'keyword')->update(['value' => $key]);
    		$res3=DB::table('tool_config')->where('k', 'des')->update(['value' => $des]);
    		$res4=DB::table('tool_config')->where('k', 'icon')->update(['value' => $icon]);
    		$res5=DB::table('tool_config')->where('k', 'version')->update(['value' => $version]);
    		$res6=DB::table('tool_config')->where('k', 'cnzz')->update(['value' => $cnzz]);
    		$res7=DB::table('tool_config')->where('k', 'headAddCode')->update(['value' => $headAddCode]);
    		return $res1||$res2||$res3||$res4||$res5||$res6||$res7;
    	}
    	function setConfigIndex($indexMessage,$indexBarragerImg,$indexBarragerInfo,$indexBarragerLink){
    		$res1=DB::table('tool_config')->where('k', 'indexMessage')->update(['value' => $indexMessage]);
    		$res2=DB::table('tool_config')->where('k', 'indexBarragerImg')->update(['value' => $indexBarragerImg]);
    		$res3=DB::table('tool_config')->where('k', 'indexBarragerInfo')->update(['value' => $indexBarragerInfo]);
    		$res4=DB::table('tool_config')->where('k', 'indexBarragerLink')->update(['value' => $indexBarragerLink]);
    		return $res1||$res2||$res3||$res4;
    	}
    	function setConfigFoot($footDes,$footRecord,$footEmail,$footCopy){
    		$res1=DB::table('tool_config')->where('k', 'footDes')->update(['value' => $footDes]);
    		$res2=DB::table('tool_config')->where('k', 'footRecord')->update(['value' => $footRecord]);
    		$res3=DB::table('tool_config')->where('k', 'footEmail')->update(['value' => $footEmail]);
    		$res4=DB::table('tool_config')->where('k', 'footCopy')->update(['value' => $footCopy]);
    		return $res1||$res2||$res3||$res4;
    	}
    	function setConfigEditor($editorTitle,$editorTheme,$editorHeight){
    		$res1=DB::table('tool_config')->where('k', 'editorTitle')->update(['value' => $editorTitle]);
    		$res2=DB::table('tool_config')->where('k', 'editorTheme')->update(['value' => $editorTheme]);
    		$res3=DB::table('tool_config')->where('k', 'editorHeight')->update(['value' => $editorHeight]);
    		return $res1||$res2||$res3;
    	}
    	function setConfigList($defaultTitle,$paginateCount,$listCodeLength){
    		$res1=DB::table('tool_config')->where('k', 'defaultTitle')->update(['value' => $defaultTitle]);
    		$res2=DB::table('tool_config')->where('k', 'paginateCount')->update(['value' => $paginateCount]);
    		$res3=DB::table('tool_config')->where('k', 'listCodeLength')->update(['value' => $listCodeLength]);
    		return $res1||$res2||$res3;
    	}
    }
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Pyspark综合案例(pyspark安装和java运行环境配置)
    【向题看齐】408之操作系统OS概念记忆总结
    基于springboot财务管理系统设计与实现-计算机毕业设计源码+LW文档
    银行卡转账记录p图软件,建设邮政工商招商农业,易语言回执单生成开发!
    Kotlin学习之函数
    机车整备场数字孪生 | 图扑智慧铁路
    《艾尔登法环 黄金树幽影》是什么?Mac电脑怎么玩《艾尔登法环》艾尔登法环下载
    华为OD技术面试-最短距离矩阵(动态规划、广度优先)
    【组原课设团队任务】FlyBird+FPGA+RISCV
    NLP大模型
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/127086178