PHP-线上学习教学资源全站的毕业设计--【白嫖项目】

技能的东西在这里
PHP要怎么学–【思维导图知识范围】
更多项目在这里
基于jsp的塞北村镇旅游网站的设计与实现–【毕业论文】

本系列校训

用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干!
别人项目要白嫖,网上就找范德彪!IT之路千千万,成功之法只一条!
----------白嫖别人都有理,那是洒家看得起,要是项目不咋地,天津包子狗不理!

本项目使用技术

PHP无类 PHP类写法 ThinkPHP框架 其它框架
*

环境

PHP版本 mysql版本 运行工具 编辑工具
5.5.38+Apache 5.5(phpstudy自带) phpstudy2018 phpStorm 2018

首页

在这里插入图片描述

注意:
如果上面出现警告代码的话,
直接修改php.ini 文件配置

php.ini
warning关闭的方法:首先找到并打开php.ini配置文件;然后修改内容为“display_errors=Off”;最后保存修改即可。

修改了代码,就没有烦人的警告信息了。

小技巧,可以在phpstudy里设置一个关了警告的,另一个则是打开警告的。调试的时候,切换打开警告的,等开发完成了,再使用关闭警告的PHP版本。真香!

乱码的问题

一些项目打开会有乱码的问题,本来呢这个要是使用了hbuilder 反而不成问题。其实就是用phpstorm 2018 也不是啥大问题,就按提示点一下确定就行了。
如果要设置,在这里。
在这里插入图片描述

题外的小插曲

如果mysql 冲突了。我找到一个mysql 的卸载的文章

超详细卸载mysql教程(按照步骤可完全卸载) 更新时间:2023年03月23日 09:45:40 作者:码云铁粉
这mysql和vmware一样不卸载干净问题是真的多,搞得有些朋友都想重装系统了,没事我来说一下mysql如何卸载干净,下面这篇文章主要给大家介绍了关于超详细卸载mysql的教程,只要按照步骤可完全卸载,需要的朋友可以参考下
右击【计算机】,选择【管理】,打开“计算机管理”界面
在这里插入图片描述
选择【服务和应用程序】中的【服务】,在右侧找到【mysql】,右键,选择【停止】
在这里插入图片描述
步骤2:卸载mysql软件
可以在控制面板中卸载,把mysql相关的全部卸载掉,mysql安装包也卸载掉,一会安装的时候重新下载安装包就行
1、卸载过后删除C:\Program Files (x86)\MySQL该目录下剩余了所有文件,把mysql文件夹也删了
2、删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL文件夹,如果没有可以不用删除了。
3、删除C盘下的C:\ProgramData\MySQL 所有文件,如果删除不了则用360粉碎掉即可,该programData文件是隐藏的默认,设置显示后即可见
4、关键!!!!删除C:\Documents and Settings\All Users\Application Data\MySQL下的文件夹,一定要删,你可以直接复制粘贴,就会看到这个文件夹
5注:这步是最繁琐的也是最为关键的,很多人就是因为在这步骤中没有清理干净注册表信息,从而不能重新安装成功。
1、windows+R运行“regedit”文件,打开注册表
2、删除注册表:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹,按照这个路径一个一个打开
这样就可以重新安装MySQL软件了! 篇二:

彻底删除mysql方法

1、首先,先在服务(开始——>控制面板——>管理工具——>服务)里停掉MySQL的服务。打开控制面板-添加删除程序,找到MySQL,卸载。或者用360安全卫士来卸载也行。也可以用mysql的那个安装程序删除

2、把安装好的MYSQL卸载了,但这对于卸载MySQL来说这只是一半,还有重要的另一半是要清理注册表。我们要进入注册表在开始-运行里面输入regedit,打开注册表

3、 找到关于MYSQL的项把他们都删除,要一个项一个项的查找把他们都删除,这样在安装的时候就可以了。其实注册表里MySQL的项就是这三项:

HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Application/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Application/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Application/MySQL

4、还有就是C:/WINDOWS 下的my.ini文件也删除!

这样,把上面的四项删除了之后,MySQL就基本卸载完全了。如果你还不放心的话,可以在C盘查找mysql,把相关的项都删除。

SQL92标准概述
SQL(Structured Query Language)结构化查询语言是用于管理关系型数据库的语言,它包含了数据定义、数据操纵和数据查询三个方面。SQL92是美国国家标准协会(ANSI)和国际标准化组织(ISO)于1992年制定的SQL标准,是SQL语言第二代标准。SQL92标准已经成为了关系型数据库的通用标准,几乎所有主要的关系型数据库都实现了该标准。
SQL92标准中定义了一系列的规范,包括数据类型、运算符、函数、存储过程、触发器、视图等各种方面。SQL92标准的主要目的是定义一个基本的SQL操作语言,它大大简化了对于应用程序开发人员查询和编写SQL的难度。
二、SQL92标准的主要特性
SQL92标准包含了许多重要的特性,以下是其中的一些:
1、支持基于关系模型的数据存储和查询
SQL92标准支持基于关系模型的数据存储和查询,这种数据模型是由独立的表和表之间的关系组成的。应用程序可以通过SQL语句添加、删除、修改和查询表中的数据。
2、标准化的SQL语法
SQL92标准定义了一种标准化的SQL语法,这使得不同数据库管理系统之间的SQL查询语句具有通用性,大大增强了数据的可移植性。在SQL92标准中,任何符合标准的SQL查询语句都可以在任何符合标准的数据库管理系统上执行。
3、支持事务处理
SQL92标准支持事务处理,事务是指一组关联的数据库操作,这些操作要么全部成功,要么全部失败。通过事务处理,可以确保数据库在执行任何关键操作时保持一致性、可靠性和安全性。
4、支持数据完整性约束
SQL92标准支持数据完整性约束,它们可以强制执行在某些条件下对数据库的更改,从而保证数据库的完整性和准确性。这些约束可以定义在特定的列、表、数据库或者整个数据库上,例如唯一性、非空性、外键等。

必要的项目知识

很多人以为PHP招的人少,是因为PHP做出来的项目少,事实上还真的是理解错了。只是PHP的小项目因为用的人少,不需要怎么升级,怎么维护,所以PHP用人比较少,但是你要真的看你手机里的很多收费的小软件,PHP怕是比JAVA的还多一些呢。
说是现在找一些个人推出视频的,你看他们自己的小网站,估计仍然是PHP占多数。

PHP

PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。 [1-2]PHP同时支持面向对象和面向过程的开发,使用上非常灵活。
PHP是一个拥有众多开发者的开源软件项目,最开始是Personal Home Page的缩写,已经正式更名为 “PHP: Hypertext Preprocessor”。PHP是在1994年由Rasmus Lerdorf创建的 [30],最初只是一个简单的用Perl语言编写的统计他自己网站访问者数量的程序。后来重新用C语言编写,同时可以访问数据库,1995年,PHP(Personal Home Page Tools)对外发表第一个版本PHP1。此后,越来越多的网站开始使用PHP,并且强烈要求增加一些特性,如循环语句和数组变量等,1995年发布的PHP2加入了对mySQL的支持。
PHP语言作为一种高级语言,其特点是开源, 在设计体系上属于C语言体系,它可以让很多接受过高等教育的初学者能很快接受并完成入门学习,简单好上手容易找工作自然粉丝多。如果数据量大及访问压力大,可以集成redis、mysql分表分区分库、elasticsearch搜索引擎、消息队列写保护和php系统分布式集群部署等技术方案,缓解数据存储、服务访问和数据检索带来的巨大压力。
无论是大中小型项目,PHP都是一个十分适合的高级编程语言,是否适合就看项目研发团队的对它的掌握程度。 但是对于较大的和更为复杂的项目,最常见的php-fpm编程模式就显出它的薄弱了。针对PHP-fpm暴露出的一系列缺点问题,最简单靠谱的方案就是及时升级兼容PHP的高版本,PHP7.0.0 [14]对比PHP5.6性能提升了2倍,另外PHP7.4提供的Preloading预加载机制 [11]实现了部分程序常驻内存,获取了不错的性能提升,在PHP8又提供了高效的JIT (Just-In-Time即时编译) [12]运算支持。另外水平更高的开发者可以转向难度更高的php-cli编程,它能解决大部分的系统性能问题,无论是PHP7和PHP8都支持这种模式的编程。

性能提升
PHP版本越高它的整体性能越高,根据官方介绍,PHP7.0.0
[14]对比PHP5.6性能就提升了2倍,PHP7.4已经比PHP7.0快了约30%,PHP8.0在性能上又相对PHP7.4大约改进了10%。PHP
8.0 引入了 JIT编译器特性,同时加入多种新的语言功能,例如命名参数、联合类型、注解、Constructor Property Promotion、match 表达式、nullsafe
运算符以及对类型系统、错误处理和一致性的改进。PHP拥有自己的核心开发团队,保持5年发布一个大版本、1个月发布2个小版本的频率,最新的版本是PHP8.08
[15]。PHP 7.0.0 [16]发布于2015-12-03,此版本下最新版本是PHP 7.4.21
[18](发布日期:2021-07-01),PHP 8.0.0 [17]发布于2020-11-26,此版本下最新版本是PHP
8.0.8(发布日期:2021-07-01)。

ThinkPHP

ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
前面略
2015年12月11日,ThinkPHP 5.0 Beta 发布;
2017年02月27日,Thinkphp5.0.5完整版正式发布 [3] ;
2018年05月02日,Thinkphp5.1.0RC版本发布; [4]
2019年04月22日,Thinkphp6.0RC2版本发布 [5] ;
2019年08月16日,Thinkphp6.0RC4版本发布 [6] ;
2019年12月24日,Thinkphp6.0.1版本发布 [7] ;

ThinkPHP的MVC

简单易用
模型(M):模型的定义由Model类来完成。Model类位于项目目录下面的LibModel目录。
控制器(C):应用控制器(核心控制器)和Action控制器都承担了控制器的角色,区别在于Action控制器完成业务过程,而应用控制器(App类)负责调度控制。Action控制器位于项目目录下面的LibAction目录。
视图(V):模板的实现是和框架无关的,做到了100%分离,可以独立预览和制作。模板目录位于项目目录下面的Tpl目录。

ThinkTemplate

ThinkTemplate是一个使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库。其特点包括:
1)支持XML标签库和普通标签的混合定义;
2)编译一次,下次直接运行而无需重新编译;
3)模板文件更新后,自动更新模板缓存;
4)自动加载当前操作的模板缓存文件,无需指定模板文件名称;
5)支持编码转换和Content-Type更换;
6)模板变量输出前缀支持,避免变量名称冲突;
7)模板常量替换,无需设置模板变量;
8)支持变量组合调节器和格式化功能;
9)支持替换其它模板引擎插件使用;
10)支持获取模板页面内容。

ThinkPHP 6和ThinkPHP 5

ThinkPHP 6和ThinkPHP 5相比,有以下几个主要的变化和改进:

  1. 更好的性能:ThinkPHP 6采用了更加高效的底层框架,具有更好的性能和更高的并发能力。同时,ThinkPHP 6还采用了协程技术,可以更加高效地处理大量的请求。
  2. 更加简洁的代码:ThinkPHP 6引入了更加简洁的语法,可以让开发者更加轻松地编写代码。同时,ThinkPHP 6还支持更加优雅的链式操作,可以让代码更加简洁易读。
  3. 更加灵活的路由:ThinkPHP 6的路由系统更加灵活,可以支持更加丰富的路由规则和参数配置。同时,ThinkPHP 6还支持自动路由,可以让开发者更加方便地进行路由配置。
  4. 更加方便的模板引擎:ThinkPHP 6采用了更加方便的模板引擎,可以让开发者更加轻松地编写模板。同时,ThinkPHP 6还支持模板布局和模板继承,可以让开发者更加方便地进行模板设计。
  5. 更加完善的文档:ThinkPHP 6的文档更加完善,包含了更加详细的API文档和使用说明,可以让开发者更加容易上手和使用。

总之,ThinkPHP 6相比ThinkPHP 5有了很多的改进和优化,可以让开发者更加高效地进行开发。同时,ThinkPHP 6还保持了ThinkPHP 5的优点,如优秀的扩展性和丰富的功能模块,可以满足各种不同的业务需求。
在这里插入图片描述
对比一下springBoot
MVC (SpringMVC)OM (mybatis)前面页面框架(Thymeleaf)
在这里插入图片描述
其实不管是GIT还是GITEE,上面不能运行的项目真的很多。并不是开源的项目你就都能跑得起来。

phpStudy 设置

网站目录,不能有中文或空格,就乖乖的用C语言能识别的变量名
thinkphp的项目一定要注意目录。本项目设置箭 头所指为“网站目录”
thinkPHP 的项目能不能运行起来,大部分就是目录的问题,还有就是PHP的版本问题。
在这里插入图片描述

导数据库

打开mysql-front 或navicat
注意:数据库名:jiaoda超级用户:root 密码:123456
运行本例附件即可。最后导入数据库成功的截图如下:
在这里插入图片描述

展示页面

页面太简单了。本来想加个相册一类的软件加工一下,然后发现电脑上没有。来个美图秀秀好了,原来的太丑了。不过好象是学生的作业都有这种趋势。
在这里插入图片描述

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

后台:

后台链接 :http://127.0.0.1/admin/login/index.html 登录账号 :admin 登录密码 :111111

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

数据库表结构

在这里插入图片描述

项目目录如图:

在这里插入图片描述

代码部分:

连数据库

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <[email protected]>
// +----------------------------------------------------------------------

return [
    // 数据库类型
    'type'            => 'mysql',
    // 服务器地址
    'hostname'        => '127.0.0.1',
    // 数据库名
    'database'        => 'e_learning',
    // 用户名
    'username'        => 'root',
    // 密码
    'password'        => '123456',
    // 端口
    'hostport'        => '3306',
    // 连接dsn
    'dsn'             => '',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
    'prefix'          => 'tb_',
    // 数据库调试模式
    'debug'           => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 0,
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => false,
    // 读写分离后 主服务器数量
    'master_num'      => 1,
    // 指定从服务器序号
    'slave_no'        => '',
    // 自动读取主库数据
    'read_master'     => false,
    // 是否严格检查字段是否存在
    'fields_strict'   => true,
    // 数据集返回类型
    'resultset_type'  => 'array',
    // 自动写入时间戳字段
    'auto_timestamp'  => false,
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
    // 是否需要进行SQL性能分析
    'sql_explain'     => false,
];


主页controller

<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
use app\index\model\LearnRecord;
use app\index\model\DownloadRecord;

class Index extends Controller
{
    
    
	
	public function _initialize(){
    
    
        
        $request = Request::instance();
        $controller = $request->controller();
        $action = $request->action();
		$this->assign('controller',$controller);
        $this->assign('action',$action);
    }
	
	//首页
    public function index()
    {
    
    	   
	   //精彩课程
	   $datas = db('course')->where('status',1)->order('sort desc,id desc ')->select();
	   $this->assign('datas',$datas);
	   $resourceTotal = db('resource')->where('status',1)->count();
	   $this->assign('resourceTotal',$resourceTotal);
	   return view();
    }
	
	//列表
    public function lists()
    {
    
    	   
	   //课程id
	   $id = input('id');
	   if(empty($id)){
    
    
		   $this->error('参数错误');
	   }
	   $datas = db('resource')->where('course_id',$id)->where('status',1)->order('sort desc,id desc')->select();
	   $this->assign('datas',$datas); 
	   return view();
    }
	
	//详情页
    public function view(){
    
     
      		
		$id = input('id');				
	    $result = checkRoot($id);
	    if(!$result){
    
    
		   $this->error('请您先登录!');
	    }
		
		$info = db('resource')->where('id',$id)->where('status',1)->find();
		if(empty($info)){
    
    
		   $this->error('参数错误');
		}
		$this->assign('info',$info);
		
		//课程名称
		$courseName = db('course')->where('id',$info['course_id'])->value('name');
		$this->assign('courseName',$courseName);
			
		// 目录内容
		$catalogs  = db('resource')->where(array('course_id'=>$info['course_id']))->where('status',1)->field('id,title')->order('sort desc ,id desc')->select();		
		$this->assign('catalogs',$catalogs); 
		
		$type = input('type',1);
		if($type==2){
    
    
		   $content = $info['document'] ? htmlspecialchars_decode($info['document']) : '<center>暂无内容,敬请期待!</center>';
		   $this->assign('content',$content);
		}
		$this->assign('type',$type);
		
		//观看记录
		$user_id = session('user_id');
		if($user_id){
    
    
			$record_info = db('learn_record')->where('user_id',$user_id)->where('resource_id',$id)->find();
			if(empty($record_info)){
    
    
				$dataArr = array(
				    'user_id' => $user_id,
					'course_id' => $info['course_id'],
					'resource_id' => $id,
					'addtime' => date('Y-m-d H:i:s')
				);
				model('learn_record')->save($dataArr);
			}else{
    
    
				model('learn_record')->where('id',$record_info['id'])->update(['addtime' => date('Y-m-d H:i:s')]);
			}
		}			
		
		//上、下一节
		$ids = db('resource')->where(array('course_id'=>$info['course_id']))->where('status',1)->order('sort desc,id desc')->column('id');
		$uid = $this->up_down( $id , $ids , 'up');	
		$did = $this->up_down( $id , $ids , 'down');
		$index = array_search($info['id'],$ids);	
		$this->assign('uid',$uid);
		$this->assign('did',$did);
		$this->assign('index',$index+1);
					
		return view();	
    }
	
	//源码下载
	public function downloadCode(){
    
    
	        		
		$id = input('id',0,'int');
		$result = checkRoot($id);
	    if(!$result){
    
    
		   $this->error('请您先登录!');
	    }
		//源码信息		
		$info = db('resource')->where('id',$id)->where('status',1)->find();	
		if(empty($info) || empty($info['code_path'])){
    
    
		   $this->error('参数有误!'); 
		   exit;
		}		
		
		//下载记录
		$user_id = session('user_id');
		if($user_id){
    
    			
			$record_info = db('download_record')->where('user_id',$user_id)->where('resource_id',$id)->find();
			if(empty($record_info)){
    
    
				$dataArr = array(
					'user_id' => $user_id,
					'course_id' => $info['course_id'],
					'resource_id' => $id,
					'addtime' => date('Y-m-d H:i:s')
				);
				model('download_record')->save($dataArr);
			}else{
    
    
				model('download_record')->where('id',$record_info['id'])->update(['addtime' => date('Y-m-d H:i:s')]);
			}
		}
		
		//保存路径 
		$save_path = "./public/uploads/code/".$info['code_path'];
		$title = autoCharset($info['title'],'utf-8','gbk');
		$find  = array(' ','<','>');
		$title = str_replace($find,'',$title);
		
		//开始下载
		$file = fopen($save_path,"r");
		header("Content-type:application/octet-stream");
		header("Content-Length:".filesize($save_path));
		header("Content-Disposition:attachment;filename=".$title.strrchr($info['code_path'],'.'));
		readfile($save_path);
		fclose($file);
		exit;	
	}
	
	//上、下一节
	private function up_down( $id , $arr , $flag){
    
    
			
		$arr_key_max = count($arr)-1;
		$id_key = array_search($id,$arr);
		
		if($flag=="up"){
    
    
		   $uid = ($id_key==0) ? false : $arr[$id_key-1];		  
		   return $uid;
		}
		if($flag=="down"){
    
    
		   $did = ($id_key==$arr_key_max) ? false : $arr[$id_key+1];
		   return $did;
		}
		
	}
	
	
	//登录页面
	public function login()
	{
    
    
	   if(session('user_id') || session('username')){
    
    
	      $this->redirect('Index/user');
	   }else{
    
    
	      return view();
	   }
	}
	
	//登录验证
	public function chkLogin()
	{
    
    
	   if(request()->isAjax()){
    
    
			if(session('qavalue') != input('iQapTcha')){
    
    
			    $res['status'] = false;
                $res['msg'] = '请滑动滑块!';
			}else{
    
    								 
				$member = model('Member');
				$num = $member->login(input('post.')); 				
				if($num==1){
    
    
					$res['status'] = true;
					$res['msg'] = url('Index/index');
				}elseif($num==2){
    
    
					$res['status'] = false;
					$res['msg'] = '密码错误!';
				}elseif($num==3){
    
    
					$res['status'] = false;
					$res['msg'] = '用户不存在!';
				}
			}
        }else{
    
    
		    $res['status'] = false;
            $res['msg'] = '请求错误~';
		}
		return json($res);
	}
	
	// 滑块初始化
	public function setQapTcha()
	{
    
          
       session('qavalue',input('pass'));        
    }
	
	// 校验滑块
	public function checkSlider()
	{
    
    
        $aResponse['error'] = false;
        session('iQaptcha',false);

        if(isset($_POST['action'])){
    
    
            if(htmlentities($_POST['action'], ENT_QUOTES, 'UTF-8') == 'qaptcha'){
    
    
                session('iQaptcha',true);
                if(session('iQaptcha')){
    
    
                    $aResponse['val'] = session('qavalue');
                    return json($aResponse);
                }else{
    
    
                    $aResponse['error'] = true;
                    return json($aResponse);
                }
            }else{
    
    
                $aResponse['error'] = true;
                return json($aResponse);
            }
        }else{
    
    
            $aResponse['error'] = true;
            return json($aResponse);
        }
    }
	
	//注册页面
	public function regist()
	{
    
    
	   if(session('user_id') || session('username')){
    
    
	      session(null); 
	   }
	   return view();	   
	}
	
	//保存用户
	public function saveMember()
	{
    
    
	   if(request()->isAjax()){
    
    
			if(!captcha_check(input('code'))){
    
    
			    $res['status'] = false;
                $res['msg'] = '验证码错误~';
			}else{
    
    				
				$post = input('post.');  			         				
				// 验证表单
				$validate = \think\Loader::validate('Member'); 
				if(!$validate->scene('save')->check($post)){
    
      
					$res['status'] = false;
					$res['msg'] = $validate->getError(); 
					return json($res);               
				}
				$data = array(
				    'username' => $post['username'],
					'password' => md5(sha1($post['password'])), 
					'addtime'  => time(),
				);
				//$member = new Member(); 
				$member = model('Member');
				$result = $member->save($data); 
				if($result){
    
    
				    session('user_id', $member->id);
                    session('username', $post['username']);
					$res['status'] = true;
					$res['msg'] = url('Index/index');
				}else{
    
    
					$res['status'] = false;
					$res['msg'] = '保存失败!';
				}
			}
        }else{
    
    
		    $res['status'] = false;
            $res['msg'] = '请求错误~';
		}
		return json($res);	
	}
	
	//退出
	public function logout(){
    
    
        session('user_id',null); 
		session('username',null); 
        $this->redirect('Index/index');
    }
	
}

主页VIEW

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">	
<meta name="keywords" content="明日科技,thinkphp5.0,编程e学网" />
<meta name="description" content="明日科技,thinkphp5.0,编程e学网" />
<title>编程e学网</title>
<link rel="shortcut icon" href="favicon.ico">
<link rel="stylesheet" type="text/css" href="__INDEX__/css/public.css" />
<link rel="stylesheet" type="text/css" href="__INDEX__/css/index.css" />
</head>
<body>  
    <div id="preloader">
        <div id="preloader-inner"></div>
    </div>  
    {
    
    include file="public/top"/}    		
	<div class="lightball">       
        <div class="clubTit">
        	<img src="__INDEX__/images/banner.png">
        	<a href="javascript:" class="signIn">立即学习</a>        	
        </div>
        <div class="banner_btn"><img src="__INDEX__/images/btn2.png"></div>
        <div class="light-bottom"></div> 
    </div>    
    <!--中间课程部分-->
    <div class="content">
    	<div class="plat">
			<div class="zero">
				<div class="zero_title">
					<p class="bigsize"><span class="color_red">精彩课程</span></p>
					<p class="small_size margin_t"><span class="margin_r">{
    
    $datas|count}</span> <span class="margin_r"> {
    
    $resourceTotal} 小节</span> {
    
    notempty name="datas"}学习时长 {
    
    $resourceTotal/5|ceil}{
    
    /notempty}</p>
				</div>
				<div class="zero_list">
                  {
    
    notempty name="datas"}
                   {
    
    foreach name="datas" item="item"}
					<div class="list_infor">         
                        <a href="{:url('lists',['id'=>$item.id])}"><img src="__UPLOADS__/image/{$item.image_path}" onerror="this.src='__INDEX__/images/no_image.jpg'"></a>
						<a href="{:url('lists',['id'=>$item.id])}"><p class="small_size font_weight margin_l" title="{$item.name}">{
    
    $item.name}</p></a>    
						<div class="infor_list">
							<p class="icon_1">{
    
    $item.id|getResourceTotal}小节</p>
							<p class="icon_2">{
    
    $item.id|getCourseLearnerTotal}人观看</p>
						</div>
					</div>               				
				   {
    
    /foreach}
                  {
    
    else/}
                    <center>暂无课程</center>
                  {
    
    /notempty}
				</div>
			</div>
		</div>
	</div>   
    {
    
    include file="public/foot"/}
    <script type="text/javascript" src="__INDEX__/js/idangerous.swiper.min.js"></script>
    <script type="text/javascript" src="__INDEX__/js/jquery.preloader.min.js"></script>		
    <script type="text/javascript" src="__INDEX__/js/three.js"></script>	
    <script type="text/javascript" src="__INDEX__/js/Projector.js"></script>	
    <script type="text/javascript" src="__INDEX__/js/CanvasRenderer.js?v1"></script>	
    <script type="text/javascript" src="__INDEX__/js/light.min.js?v2"></script>
    <script type="text/javascript">
       $(window).scroll(function(event){
    
    
          if($(window).scrollTop() >= 920){
    
    
		     $(".top-nav").removeAttr("style").addClass('fix');
		  }else{
    
    
		     $(".top-nav").css('position','absolute').removeClass('fix');
		  }
       });
	   $(window).preloader({
    
    
		   delay: 0.1
	   });
	   $(function(){
    
    
		  $('.signIn').click(function(){
    
    
		     //$(window).scrollTop(920);
			 $('html,body').animate({
    
    scrollTop: '920px'}, 600);
		  });
	   });
    </script>   		
</body>
</html>

其它的页面自己下载资源包好了

参考

基于jsp的塞北村镇旅游网站的设计与实现–【毕业论文】
https://blog.csdn.net/dearmite/article/details/131962993

配套资源

PHP-线上学习教学资源全站的毕业设计–【白嫖项目】
https://download.csdn.net/download/dearmite/88168948

作业:

把项目搭建起来,完成其它自己想到的功能。学PHP就是要任性,随心所欲。
只有魔法才能打败魔法!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/dearmite/article/details/132112316
今日推荐