一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

PHP实现个人博客网站

时间:2022-10-17 编辑:坚强 来源:一聚教程网

本文为小伙伴们带来了关于PHP实现个人博客网站的相关内容,感兴趣的小伙伴一起来看看吧。

一、运行展示

二、功能说明

未登录用户:

仅可以浏览所有博客的内容。

已登录用户:

  • 浏览所有博客的内容;
  • 发表博客;
  • 删除自己的博客;
  • 修改自己的博客;
  • 在任一博客下评论;
  • 修改昵称和密码。

管理员:

  • 可以执行普通用户的所有功能;
  • 修改任一博客的内容;
  • 删除任一博客;
  • 删除任一用户。

网站平台功能补充说明:

  • 动态显示博客信息(如当前所有博客数量,用户个人博客数量,以及博客内容信息);
  • 博客和评论发表的时间遵循北京时间;
  • 登录时只要输入账号密码即可,后台会自动判断该账号为普通用户还是管理员,进而推送到对应的网页。

三、核心代码讲解

1、创建数据库

drop database  if  exists grblog;
CREATE DATABASE `grblog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE grblog;
-- 人员信息
CREATE TABLE admin
(
    adminMail varchar(25) primary key,
    adminName varchar(10) not null,
    passWord varchar(15) not null,
    level enum('user', 'super')
);

-- 博客信息
CREATE TABLE blog
(
    blogNo int primary key AUTO_INCREMENT,
    blogTopic varchar(50) not null,
    blogContent varchar(5000) not null,
    adminMail varchar(25) not null,
    importDate date not null ,
    foreign key (adminMail) references admin(adminMail)

);

-- 评论信息
CREATE TABLE comment
(
    commentNo int primary key AUTO_INCREMENT,
    commentContent varchar(500) not null,
    adminMail varchar(25) not null,
    blogNo int,
    commentDate datetime not null ,
    foreign key (adminMail) references admin(adminMail),
    foreign key (blogNo) references blog(blogNo)

);

2、初始化数据

INSERT INTO `admin` (`adminMail`,`adminName`, `passWord`, `level`) VALUES ('2015100@126.com', '不脱发的程序猿', 'pwdpwd', 'user'),('2015333@163.com', '涛歌依旧', 'pwdpwd', 'user'),('2015222@qq.com', 'ThinkWon', 'pwdpwd', 'user'),('2015111@qq.com', 'SAP剑客', 'pwdpwd', 'user'),('2015201@126.com', '敖 丙', 'pwdpwd', 'user'),('2015202@126.com', '>=FreeMan=<', 'pwdpwd', 'user'),('2015203@126.com', '布客飞龙', 'pwdpwd', 'user'),('2015101@126.com', 'Riveore', 'pwdpwd', 'user'),('2015102@1256.com', '打杂人', 'pwdpwd', 'user'),('super@126.com', '超级管理员', 'superpwd', 'super');
INSERT INTO `blog` (`blogNo`,`blogTopic`, `blogContent`, `adminMail`, `importDate`) VALUES (1, 'Python开发人员常犯的几个重大错误', 'Python 无疑是当今使用最广泛的编程语言,特别是进入人工智能时代,已经成为人工智能开发的主要语言,甚至小学三年级就已经教学该语言。它之所以如此流行,很大程度上是由于简单的语法和老少皆宜的可读性,这使得它非常容易使用。初学者之所以喜欢 Python,是因为它给人一种感觉就像是用英语写一段伪代码一样。但是,无论你有多么丰富的经验,也无论你已经研究过多少种语言,切换到 Python 并不能保证你能做到平稳过渡。具有面向对象编程背景的开发人员很容易忽略 Python 的常用特性,或者说python范式编程。这样一来,他们很可能会误用编程结构,从而可能出现难以发现的、不可预见的错误。更糟糕的是,这些错误大多很难发现,并且可能会给项目工程带来天大的麻烦,轻则删库跑路,重则抱恨终身。在本文中,将列出程序员(通常是菜鸟)可能会犯的常见错误。此外,我还将介绍如何避免这些错误,以便编写出更好的、无错误的 Python 代码。', '2015100@126.com','2020-12-1'),(2, '组合优化问题', '其实组合优化问题我想大家肯定是遇到过的,因为可能现在在看这篇博客的同学都学过了算法程序设计或者数据结构等的课程。那么你们肯定见过所谓的0-1背包问题,这个问题就是很典型的组合优化问题。当然啦还有旅行商问题等也属于组合优化问题。很多离散组合优化问题都是从运筹学(Operations Research,OR)中演化出来的。组合优化其所研究的问题涉及到信息技术、经济管理、工业工程、交通运输、通信网络等众多领域,在科学研究和生产实践中都起着重要的作用。我们不难发现,其实这些问题解决的方法其实很简单,比方说0-1背包,那无非就是n个物品,每个物品要么带要么不带,即为2^n的情况,得到所有情况然后取出价值最大的那种方法就可以了。是呀,这样子的话真的是老简单了。哈哈,开个玩笑。只要是稍微多想一想都能发现我们上述的穷举法有一个很致命的问题,就是当你的n值过大时,对应的计算量可是呈指数暴增的。所以这个时候,就需要我们借助智能优化计算方法,可以在合理的时间内求解得到令人满意的解,从而满足实践的需要。对于算法的计算复杂性,我们一般很容易进行判断,例如使用蛮力法去枚举旅行商问题或者0-1背包问题的算法,就是具有指数计算复杂性的算法。', '2015101@126.com','2020-12-1'),(3, 'PHP简介', 'PHP最初是一个小型的开源项目,随着越来越多的人发现它很有用,它发展了起来。Rasmus Lerdorf在1994年发布了PHP的第一个版本。PHP是“PHP:超文本预处理器(PHP: Hypertext Preprocessor)”的递归首字母缩略词。PHP是嵌入在HTML中的服务器端脚本语言。它用于管理动态内容,数据库,会话跟踪,甚至建立整个电子商务网站。它与许多流行的数据库集成,包括MySQL,PostgreSQL,Oracle,Sybase,Informix和Microsoft SQL Server。PHP在其执行过程中令人愉快,特别是在Unix端编译为Apache模块时更是如此。MySQL服务器一旦启动,就会在记录设置时间内执行非常复杂的查询,并带有巨大的结果集。PHP支持大量主要协议,如POP3,IMAP和LDAP。PHP4增加了对Java和分布式对象体系结构(COM和CORBA)的支持,使n层开发成为第一次。PHP是宽容的:PHP语言试图尽可能宽容。PHP语法是类C的。', '2015101@126.com','2020-12-1'),(4, 'MySQL 教程', 'MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。在此次教程中,会让大家快速掌握 MySQL 的基本知识,并轻松使用 MySQL 数据库。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:1.数据以表格的形式出现;2.每行为各种记录名称;3.每列为记录名称所对应的数据域;4.许多的行和列组成一张表单;5.若干的表单组成database', '2015222@qq.com','2020-12-1'),(5, 'web前端知识体系梳理', '现在是信息时代,经过 web1.0 时期、web2.0 时期到现在的移动互联网时期,信息获取越来越高效,坐着不动就会有大量的新闻、博客、资讯向你推荐而来。作为一名靠谱的程序员,你免不了要查阅大量的文章、视频和书籍来充斥你的知识量,不断学习。但是现在网上大量的信息堆积起来,对于你来说意味着什么?你如何去合理的筛选、梳理这些获得的信息,又如何去知道自己现在还缺什么信息?到这里就应该提出本文的主题 —— 知识体系 。其实无论针对哪个知识领域,它都是有一套完整的、成型的知识体系和标准作为支撑的,例如数学、建筑、医学、机械等等,当然包括计算机编程,其中肯定包括前端开发。有了完善的知识体系,再来面对大量的信息获取,你就知道每个信息所说的知识点是属于知识体系中的哪个部分。同时,你也会很清楚自己哪些部分掌握的好,哪些部分掌握的不好,甚至哪些部分自己压根都没听说过。现在不一样了,网速越来越快、浏览器和 JS 引擎足够强大,而且 vue React 等框架流行开来,使得前端 JS 的业务逻辑越来越大,这些基础知识必须掌握。最后别忘了,nodejs 都盛行多年了,这可让 JS 运行到 server 了,和 php java 等干一样的事情。最后补充一句。其实编程基础也不止这几个,像编码、编译原理、计算机组成、网络等这些都是基础,但是并不会和前端开发直接相关(或者和我们日常开发相关性不大),这里就不再深究了。有兴趣的读者,可以自己继续补充。', '2015101@126.com','2020-12-1'),(6, '后台开发知识点', '多线程和多进程区别:1.进程之间数据分开,进程间通信需要特殊的ipc机制(管道,信号量,共享内存,消息队列),线程存在于进程内,线程之间共享进程的堆区间,全局静态存储区,而各自拥有自己独立的栈空间,同步数据用互斥量;2.进程的创建,销毁,切换复杂,速度慢,线程是轻量级进程。;3.进程占用内存多,cpu利用率低。线程占用内存少,CPU利用率高。;4.进程之间不会互相影响,进程的一个线程挂掉则会导致整个进程挂掉。线程私有内容:线程id,寄存器值,栈内存,线程的调度策略,线程的私有数据,errno变量', '2015201@126.com','2020-12-1'),(7, 'web后台开发需要学习哪些知识', 'web后台开发需要学习的知识有HTML、CSS、JavaScript、DOM、Web服务器、服务器脚本语言、数据库及SQL语言以及baiweb框架。web后台开发学习步骤:1、学习HTML和CSS。HTML(超文本标记语言)是网页的核心,学好HTML是成为Web开发人员的基本条件。学习CSS了,它可以帮你把网页做得更美观。利用HTML和CSS模拟一些你所见过的网站的排版和布局(色彩,图片,文字样式等等)。2、学习javascript,了解DOM。JavaScript是一种能让你的网页更加生动活泼的程序语言。学习JavaScript的基本语法,学会用javascript操作网页中dom元素。接着学习使用一些javascript库,比如jquery是大部分WEB开发人员都喜欢用的,通过Jquery可以有效的提高JavaScript的开发效率。3、了解Web服务器。学习一点Unix和Linux的基本知识,因为大部分Web服务器都运行在Unix和Linux平台上。4、学好一门服务器端脚本语言。目前流行的服务器脚本语言有:php、asp.netjsp、ruby、python等。可以选一个自己喜欢的进行学习。5、学习数据库及SQL语法。要构建动态页面通常会使用到数据库,常用的数据库有SQLServer、Oracle、MySQL 等,它们都会遵循标准的SQL原则。通常asp.net 程序使用SqlServer数据库,PHP、java使用Oracle、MySQL数据库。6、学习使用Web框架。当你掌握了HTML,CSS,JavaScript和服务器端脚本语言后,就应该找一个Web框架加快你的Web开发速度,使用框架可以节约你很多时间。', '2015203@126.com','2020-12-14'),(8, '详细后端开发知识讲解', '本片文章面向后端开发,讲述后端在进行开发时所使用的WEB服务器的工作流程,正所谓知根知底,WEB服务器是后端开发人员日常用于调试WEB程序和与前端通讯的一种方式!WEB服务器最为强大的地方是能够执行WEB程序,其WEB程序的编程语言并没有明确的规定,因为只要你所使用的服务器支持这样的程序就可以了!WEB服务器更像是一个平台,在此平台上编写软件我们称其为WEB编程,注:WEB编程下有许多规范比如CGI,FastCGI等等,这个是要看服务器的支持范围!不同服务器所使用的规范不同,比如JSP服务器只能运行由JAVA EE编写的WEB程序,不能用于运行像C/C++、Python等编程语言编写而成的WEB程序!通常情况下的WEB服务器所使用的编程规范均为CGI编程、只能运行CGI规范的程序,除了一些例外的WEB服务器,比如JSP服务器!CGI是Common Gateway Interface的缩写,其意义为公用网关接口,意思可以理解为:在WEB服务器上运行一个程序或脚本,并且WEB服务器要将脚本执行结果返回给浏览器(客户端)!规范的意思是,无论你使用任何语言编写,都必须使用输出函数(cout,printf,print)输出HTML格式的数据信息,WEB服务器根据这些信息传递给浏览器,浏览器HTML树并将其显示到浏览器当中,即为一个WEB页面!更加深层次的来说其实,无论你使用什么语言编写,只要在WEB服务器中的配置文件中,使其支持CGI编程,然后将你编译完成的二进制可执行文件后缀名改为.cgi,最后前端页面在使用get或post方法请求这个WEB程序,WEB服务器会自动执行这程序并将其结果送回给浏览器(TCP/IP协议)!', '2015202@126.com','2020-12-15');
INSERT INTO `comment` (`commentNo`,`commentContent`, `adminMail`, `blogNo`, `commentDate`) VALUES (1, '写得真好,棒!', '2015201@126.com', 1, '2020-12-12 12:20:20'), (2, '写得不错,可以一起交流学习。', '2015202@126.com', 2, '2020-12-12 12:21:20'), (3, '不错不错,解决了我的疑惑。', '2015102@126.com', 2, '2020-12-12 12:22:20'), (4, '文章写得很好,棒!', '2015201@126.com', 3, '2020-12-12 12:20:20'), (5, '文笔不错。', '2015102@126.com', 3, '2020-12-12 12:22:22'), (6, '可以可以,终于解决我的困惑了,感谢!', '201100@126.com', 4, '2020-12-12 12:20:20'), (7, '终于解决我的困惑了,感谢!', '2015100@126.com', 5, '2020-12-12 12:22:20'), (8, '解决我的困惑了,感谢!', '2015100@126.com', 1, '2020-12-12 12:21:21'), (9, '解决我的困惑了,感谢!', '2015100@126.com', 6, '2020-12-12 12:20:20'), (10, '解决我的困惑了,感谢!', '2015222@qq.com', 6, '2020-12-12 12:20:20'), (11, '解决我的困惑了,感谢!', '2015111@qq.com', 3, '2020-12-12 12:21:21'), (12, '超级管理员给你点赞!', 'super@126.com', 1, '2020-12-12 12:21:21'), (13, '解决我的困惑了,感谢!', '2015111@qq.com', 7, '2020-12-16 12:21:21'), (14, '超级管理员给你点赞!', 'super@126.com', 7, '2020-12-16 12:21:21'), (15, '超级管理员给你点赞!', 'super@126.com', 8, '2020-12-12 12:21:21'), (16, '解决我的困惑了,感谢!', '2015111@qq.com', 8, '2020-12-16 12:21:21'), (17, '写得真好,棒!', '2015201@126.com', 8, '2020-12-12 12:20:20');

3、登录验证

当用户在登录页面输入账号和密码后点击登录时,会跳转到下面的页面进行验证,其中用到session进行存储账号和密码。

首先是判断账号密码是否为空,接着是判断账号是否存在,密码是否对应,若对应再判断输入的用户是普通用户还是管理员。


alert("用户名密码不能为空");location="signin.php";';
    exit;
}
require_once "config.inc.php";
$demand = "select passWord,level,adminName from Admin where adminMail = '$admin'";
$res = mysqli_query($mysqli, $demand);
$power = mysqli_fetch_row($res);
$_SESSION["adminMail"]=$admin;
$_SESSION["passWord"]=$password;
$_SESSION["level"]=$power[1];
if ($power[0] == $password) {
    if ($power[1] == 'user') {
        $_SESSION["adminName"]=$power[2];
        header('location:user_index.php');
    } else if ($power[1] == 'super') {
        $_SESSION["adminName"]=$power[2];
        header('location:super_index.php');
    } else {
        echo '';
        exit;
    }
} else {
    echo '';
}
mysqli_free_result($res);
mysqli_close($mysqli);

其中的require_once "config.inc.php";用于连接数据库,代码实现如下:


4、用户注册

首先判断账号密码是否为空,接着判断注册账号是否已经存在。


alert("用户名或密码不能为空");location="signup.php";';
    exit;
}
require_once "config.inc.php";
if (mysqli_connect_errno()) {
    die("Failed to connect to MySQL: (" . mysqli_connect_errno() . ") " . mysqli_connect_error());
}
$demand1 = "INSERT INTO admin values('$admin','$adminName','$password','$level')";
$res1 = mysqli_query($mysqli, $demand1);
if ($res1){
    $_SESSION['adminName'] = '';
    echo '';
}
else{
    echo '';
}

mysqli_free_result($res);
mysqli_free_result($res1);
mysqli_close($mysqli);

5、发表博客

首先判断用户是否已经登录,其次判断输入的数据是否满足格式需求(是否为空)


    alert("博客发表成功");location="super_myblogs.php";';
    } else {
        mysqli_close($mysqli);
        echo '';
    }
}
else{
    echo '';
}
?>

6、更新博客

这里是以普通用户为例,首先判断是否已经登录 ,接着判断是否具有更改博客的权限(非自己博客不能更改),最后判断输入的数据是否满足格式需求(是否为空)


alert("博客修改成功");location="user_index.php";';
        } else {
            mysqli_close($mysqli);
            echo '';
        }
    }else{
        echo '';
    }


} else {
    echo '';
}
?>

7、删除博客

这里普通用户和管理员的代码时基本一样的,首先判断是否登录,接着判断是否为普通用户,若是,则判断要删除的博客是否为自己的博客,若为管理员,则无需判断是否为自己的博客。


alert("无权限!");location="user_index.php";';
        } else {
            $demand = "delete from blog where blogNo = '$no_blog'";
            $res = mysqli_query($mysqli, $demand);
            if ($res) { //跳转页面
                mysqli_close($mysqli);
                echo '';
            } else {
                mysqli_close($mysqli);
                echo '';
            }
        }
    } else {
        $demand = "delete from blog where blogNo = '$no_blog'";
        $res = mysqli_query($mysqli, $demand);
        if ($res) { //跳转页面
            mysqli_close($mysqli);
            echo '';
        } else {
            mysqli_close($mysqli);
            echo '';
        }
    }
} else {
    echo '';
}
?>

8、发表评论

注意评论不能为空。


alert("发表成功");location="user_index.php";';
    }
    else{
        echo '';
    }
}
else{
    echo '';
}
?>

9、修改密码

首先判断是否已经登录,接着判断新密码和第二次输入的新密码是否一致,再判断原密码是否正确。


alert("密码修改成功,请重新登录");location="signin.php";';
            } else {
                echo '';
            }
        } else {
            echo '';
        }

    } else {
        echo '';
    }
} else {
    echo '';
}
?>

10、修改昵称


alert("昵称修改成功");location="user_index.php";';
    } else {
        echo '';
    }
} else {
    echo '';
}
?>

11、管理员删除用户

需要注意的是,删除用户的同时会删除有关他的所有信息,包括他发表的博客和评论。


alert("删除成功");location="super_user.php";';

} else {
    echo '';
}
?>

四、运行环境

APMServ 5.2.6 for Windows 2000/XP/2003

五、运行说明

1、以管理员身份运行APMServ,启动服务器,点击管理MySQL数据库;

2、将数据库设计源码(.sql文件)中的数据导入数据库当中;

3、最后点击访问用户本地网站,找到我们解压后的源代码的目录并点击(记得事先将项目文件放到APMServ5.2.6wwwhtdocs目录下);

4、找到signin.php文件并点击即可进入登录页面;

5、若想体验登录后的功能,可以点击用户中心下的登录并输入账号密码即可。

(如输入普通用户账号:2015100@126.com 密码:pwdpwd;

或者管理员账号:super@126.com 密码:superpwd)

热门栏目