基于PHP实现个人博客网站

目录
  • 一、运行展示
  • 二、功能说明
  • 三、核心代码讲解
    • 1、创建数据库
    • 2、初始化数据
    • 3、登录验证
    • 4、用户注册
    • 5、发表博客
    • 6、更新博客
    • 7、删除博客
    • 8、发表评论
    • 9、修改密码
    • 10、修改昵称
    • 11、管理员删除用户
  • 四、运行环境
  • 五、运行说明

一、运行展示

二、功能说明

未登录用户:

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

已登录用户:

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

管理员:

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

网站平台功能补充说明:

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

三、核心代码讲解

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.net、jsp、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进行存储账号和密码。

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

<?php
session_start();
?>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
$admin = $_REQUEST['adminmail'];
$password = $_REQUEST['password'];

if ($admin == "" || $password == "") {
    echo '<script type="text/javascript">alert("用户名密码不能为空");location="signin.php";</script>';
    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 '<script type="text/javascript">alert("未知错误,请联系管理员");location="signin.php";</script>';
        exit;
    }
} else {
    echo '<script type="text/javascript">alert("用户名或密码错误,请重新登陆");location="signin.php";</script>';
}
mysqli_free_result($res);
mysqli_close($mysqli);

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

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<?php
 $server="localhost";  //mysql服务器地址
 $user="root";         //登陆mysql的用户名
 $pass="";   //登陆mysql的密码
 $db_name="grblog";   //mysql中要操作的数据库名

$mysqli=mysqli_connect($server,$user,$pass, $db_name);
  mysqli_query($mysqli,"SET NAMES 'utf8'");
?>

4、用户注册

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

<?php
session_start();
?>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
$admin = $_REQUEST['adminmail'];
$adminName = $_REQUEST['adminName'];
$password = $_REQUEST['password'];
$level = 'user';
if ($admin == "" || $password == "") {
    echo '<script type="text/javascript">alert("用户名或密码不能为空");location="signup.php";</script>';
    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 '<script type="text/javascript">alert("注册成功!");location="signin.php";</script>';
}
else{
    echo '<script type="text/javascript">alert("该邮箱已注册!");location="signup.php";</script>';
}

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

5、发表博客

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

<?php
session_start();
?>
    <meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
if ($_SESSION["adminName"] != "") {
    $blogTopic = $_REQUEST['blogTopic']; //博客主题
    $adminMail = $_SESSION["adminMail"];
    $blogContent = $_REQUEST["blogcontent"];
    date_default_timezone_set('Asia/Shanghai');//设置为北京时间
    $blogDate = date("Y-m-d");//自动获取时间(年月日)
    require_once "config.inc.php";

//插入BLOG信息命令
    $demand = "INSERT INTO `blog` (`blogTopic`, `blogContent`, `adminMail`, `importDate`) values('$blogTopic','$blogContent','$adminMail','$blogDate')";
    $res = mysqli_query($mysqli, $demand);
    if ($res) { //跳转页面
        mysqli_close($mysqli); //查询已经结束,在这里关闭连接
        echo '<script>alert("博客发表成功");location="super_myblogs.php";</script>';
    } else {
        mysqli_close($mysqli);
        echo '<script>alert("博客发表失败");location="super_insert_blog.php";</script>';
    }
}
else{
    echo '<script>alert("请先登录!");location="signin.php";</script>';
}
?>

6、更新博客

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

<?php
session_start();
?>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
if ($_SESSION["adminName"] != "") {
    $blogTopic = $_REQUEST['blogTopic']; //博客主题
    $adminMail = $_SESSION["adminMail"];
    $blogContent = $_REQUEST["blogcontent"];
    $blogno = $_SESSION['no_blog'];
    require_once "config.inc.php";

    $demand = "select adminMail from blog where blogNo = '$blogno'";
    $res = mysqli_query($mysqli, $demand);
    $power = mysqli_fetch_row($res);
    $mail = $power[0];

    if ($mail == $adminMail){
        //插入BLOG信息命令
        $demand2 = "UPDATE `blog` SET `blogTopic` = '$blogTopic',`blogContent` = '$blogContent' WHERE `blog`.`blogNo` ='$blogno'";
        $res2 = mysqli_query($mysqli, $demand2);
        if ($res2) { //跳转页面
            mysqli_close($mysqli); //查询已经结束,在这里关闭连接
            echo '<script>alert("博客修改成功");location="user_index.php";</script>';
        } else {
            mysqli_close($mysqli);
            echo '<script>alert("博客修改失败");location="user_update_blog.php";</script>';
        }
    }else{
        echo '<script>alert("无权限!");location="user_index.php";</script>';
    }

} else {
    echo '<script>alert("请先登录!");location="signin.php";</script>';
}
?>

7、删除博客

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

<?php
session_start();
?>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
if ($_SESSION["adminName"] != "") {
    require_once "config.inc.php";
    $level = $_SESSION["level"];
    $mail_blog = $_SESSION['mail_blog'];
    $adminMail = $_SESSION["adminMail"];
    $no_blog = $_SESSION['no_blog'];

    if ($level == 'user') {
        if ($adminMail != $mail_blog) {
            echo '<script>alert("无权限!");location="user_index.php";</script>';
        } else {
            $demand = "delete from blog where blogNo = '$no_blog'";
            $res = mysqli_query($mysqli, $demand);
            if ($res) { //跳转页面
                mysqli_close($mysqli);
                echo '<script>alert("删除博客成功");location="user_index.php";</script>';
            } else {
                mysqli_close($mysqli);
                echo '<script>alert("删除博客失败");location="user_index.php";</script>';
            }
        }
    } else {
        $demand = "delete from blog where blogNo = '$no_blog'";
        $res = mysqli_query($mysqli, $demand);
        if ($res) { //跳转页面
            mysqli_close($mysqli);
            echo '<script>alert("删除博客成功");location="super_index.php";</script>';
        } else {
            mysqli_close($mysqli);
            echo '<script>alert("删除博客失败");location="super_index.php";</script>';
        }
    }
} else {
    echo '<script>alert("请先登录!");location="signin.php";</script>';
}
?>

8、发表评论

注意评论不能为空。

<?php
session_start();
?>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
if ($_SESSION["adminName"] != ""){
    require_once "config.inc.php";
    $email = $_SESSION['adminMail'];//用户名
    $blogNo = $_SESSION['no_blog'];//博客号
    $new_comment =$_REQUEST['new_comment'];//新评论
    date_default_timezone_set('Asia/Shanghai');//设置为北京时间
    $commentDate=date('Y-m-d H:i:s');//自动获取时间(年月日时间)
    $demand = "INSERT INTO `comment` (`commentContent`, `adminMail`, `blogNo`, `commentDate`) values('$new_comment','$email',$blogNo,'$commentDate')";
    $insertComment = mysqli_query($mysqli,$demand);
    if ($insertComment){
        echo '<script>alert("发表成功");location="user_index.php";</script>';
    }
    else{
        echo '<script>alert("输入错误!");location="user_index.php";</script>';
    }
}
else{
    echo '<script>alert("请先登录!");location="signin.php";</script>';
}
?>

9、修改密码

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

<?php
session_start();
?>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
if ($_SESSION["adminName"] != "") {
    require_once "config.inc.php";
    $email = $_SESSION['adminMail'];//用户名
    $real_pwd = $_SESSION['passWord'];//真实密码
    $past_pwd = $_REQUEST['past_pwd'];//原密码
    $new_pwd = $_REQUEST['new_pwd'];//新密码
    $pwd = $_REQUEST['new_pwd_2'];//第二次新密码
    if ($new_pwd == $pwd) {
        if ($real_pwd == $past_pwd) {
            $sql = "update admin set password = '$pwd' where adminMail='$email'";
            $updatepwd = mysqli_query($mysqli, $sql);
            if ($updatepwd) {
                echo '<script>alert("密码修改成功,请重新登录");location="signin.php";</script>';
            } else {
                echo '<script>alert("未知错误!");location="user_update_pwd.php";</script>';
            }
        } else {
            echo '<script>alert("原密码输入错误!");location="user_update_pwd.php";</script>';
        }

    } else {
        echo '<script>alert("两次密码输入不相同!");location="user_update_pwd.php";</script>';
    }
} else {
    echo '<script>alert("请先登录!");location="signin.php";</script>';
}
?>

10、修改昵称

<?php
session_start();
?>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
if ($_SESSION["adminName"] != "") {
    require_once "config.inc.php";
    $email = $_SESSION['adminMail'];//用户名
    $new_name = $_REQUEST['new_name'];//新昵称
    $sql = "update admin set adminName = '$new_name' where adminMail='$email'";
    $updatename = mysqli_query($mysqli, $sql);
    if ($updatename) {
        $_SESSION["adminName"] = $new_name;
        echo '<script>alert("昵称修改成功");location="user_index.php";</script>';
    } else {
        echo '<script>alert("输入错误!");location="user_update_name.php";</script>';
    }
} else {
    echo '<script>alert("请先登录!");location="signin.php";</script>';
}
?>

11、管理员删除用户

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

<?php
session_start();
?>
<meta name="viewport" charset="utf-8" content="width=device-width, initial-scale=1.0">
<?php
if ($_SESSION["adminName"] != "") {
    require_once "config.inc.php";
    $admai = $_GET['delete_mail'];
    $sql = "delete from admin where adminMail='$admai'";
    $delete = mysqli_query($mysqli, $sql);

    $sql2 = "delete from blog where adminMail='$admai'";
    $delete2 = mysqli_query($mysqli, $sql2);
    $sql3 = "delete from comment where adminMail='$admai'";
    $delete2 = mysqli_query($mysqli, $sql3);
    echo '<script>alert("删除成功");location="super_user.php";</script>';

} else {
    echo '<script>alert("请先登录!");location="signin.php";</script>';
}
?>

四、运行环境

APMServ 5.2.6 for Windows 2000/XP/2003

五、运行说明

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

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

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

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

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

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

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

以上就是基于PHP实现个人博客网站的详细内容,更多关于PHP博客网站的资料请关注我们其它相关文章!

(0)

相关推荐

  • PHP仿博客园 个人博客(1) 数据库与界面设计

    自学PHP大半年多了,断断续续地,但是最终还是坚定了我的想法,将PHP继续下去,所以写这个PHP的博客是为了找个稳定的 PHP工作,不求工资多高,但求一收留之地.我能看懂大部分英语文档,人不蠢,爱学习,有兴趣地可以联系下!有诚意的来吧!qq:240382473 我会分3-5次发布所有关键代码和文档说明,博客后台所有的样式均套用博客园! 说明: 1. 不完全采用MVC架构,但是理念就是这样的.因为还不能写出很稳定的MVC架构. 2.几乎不采用JQUERY AJAX 因为不是特别熟悉,运用起来还不自

  • PHP仿博客园 个人博客(2) 数据库增添改删

    废话不多说了,上一篇有个核心概念就是 give action do something ! 这篇我就用代码来解释这个概念是啥意思,先看我的 post.class.php . 这个文件是我们的数据层处理类. 简单介绍一下这个model 类,它继承了一个数据库基类来做crud 等常用操作, 每次初始化时就会初始化一个数据库对象 $db. 我们就用这个对象来操作我们的数据.对于数据操作有2个重要方法 storePostFormValues( ) , storeDiaryFormValues( ),它们

  • php实现博客,论坛图片防盗链的方法

    本文实例讲述了php实现博客,论坛图片防盗链的方法.分享给大家供大家参考,具体如下: 防盗链的方式很多,我这里就说说我对放盗链的理解,这个跟防止远程提交是一个原理. 先介绍一个函数 uniqid(string); //这个函数的作用,是在你添加的字符串后面随即添加一个独一无二ID字符串. 如果你还不放心,你可以给这个函输出的字符串再用SHA1()函数进行加密. 这样我们得到了一个独一无二,且只有你自己知道的字符串,用来做数字签证.接下来是如何检测这个数字签证. function has($str

  • PHP+Ajax实现的博客文章添加类别功能示例

    本文实例讲述了PHP+Ajax实现的博客文章添加类别功能.分享给大家供大家参考,具体如下: 一. 代码 fun.js function saveType(typename, username){ if(typename==''){ //判断博客类别是否为空 alert('请输入类别名称!'); }else if(username==''){ //判断用户名是否为空 alert('请输入用户名!'); }else{ var xmlObj; //定义XMLHttpRequest对象 var urlD

  • PHP实现的博客欢迎提示功能(很特别哦)

    以下代码的实现效果: 1.留言的访客显示欢迎词2.一般访客来源提示3.不留言潜水党(刷新大于7次,催促留言)4.针对IE的推送更新提示 使用方法:调用相应的函数,例如welcome_msg(). 复制代码 代码如下: <?php/** * 欢迎词 * 以前的欢迎词在右上角提示. * 实现原理: * 通过$_SERVER['HTTP_REFERER']判断来路 * 通过$_SERVER["HTTP_USER_AGENT"]判断用户使用的浏览器 * 通过$_COOKIE["

  • 基于PHP实现个人博客网站

    目录 一.运行展示 二.功能说明 三.核心代码讲解 1.创建数据库 2.初始化数据 3.登录验证 4.用户注册 5.发表博客 6.更新博客 7.删除博客 8.发表评论 9.修改密码 10.修改昵称 11.管理员删除用户 四.运行环境 五.运行说明 一.运行展示 二.功能说明 未登录用户: 仅可以浏览所有博客的内容. 已登录用户: 浏览所有博客的内容: 发表博客: 删除自己的博客: 修改自己的博客: 在任一博客下评论: 修改昵称和密码. 管理员: 可以执行普通用户的所有功能: 修改任一博客的内容:

  • 六个步骤,从零开始教你搭建基于WordPress的个人博客

    目录 摘要:WordPress是使用PHP语言开发的博客平台,是免费开源的.用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站,也可以把WordPress当作一个内容管理系统(CMS)来使用. 一.购买云服务器和域名 可以参考以下博客进行购买,以华为云为例,服务商可以自选.如果已有云服务器和域名,直接进行第二步操作. ▶ 云服务器和域名的购买-华为云 二.远程连接云服务器 可以参考以下博客进行远程连接服务器,也可以用其他办法连接.连接以后进行第三步操作. ▶ Xftp和Xshel

  • 详解用Docker快速搭建一个博客网站

    目录 一.准备工作 二.部署流程  三.访问测试 Halo 是一款现代化的个人独立博客系统,给习惯写博客的同学多一个选择. 官网地址:https://halo.run/ 一.准备工作 本章教程基于Docker搭建,所以需要你提前在服务器上安装好Docker环境. Docker安装教程:https://www.jb51.net/article/94067.htm 二.部署流程 (1)创建工作目录 mkdir ~/.halo && cd ~/.halo (2)下载配置文件到工作目录 wget

  • 博客网站的“钱”途

    博客固然能够吸引大量的眼球,但仅仅有了眼球,还不足以让这个新生互联网概念的商业价值转化成真金白银. 2005年是以博客为核心的Web2.0概念风光无限的日子.博客.播客.SNS.RSS等概念被炒作到巅峰.清科公司创始人.首席执行官倪正东说,2006年,博客网站将找到适合的商业模式并开始真正有稳定的收入.2006年伊始,博客就抢占了元宵节和情人节这两个新年之初最特殊的日子.元宵节晚上,娱乐界明星徐静蕾在她的博客上贴出文章<忘记的思念忘不掉的情人节>,令本来就备受关注的博客一举冲破1000万点击数

  • 利用django创建一个简易的博客网站的示例

    一.页面实现 index.html base.html post.html header.html footer.html <!-- index.html--> {% extends 'base.html' %} <html lang="en"> <head> <meta charset="UTF-8"> <title>个人博客</title> </head> <body>

  • 基于Python爬取51cto博客页面信息过程解析

    介绍 提到爬虫,互联网的朋友应该都不陌生,现在使用Python爬取网站数据是非常常见的手段,好多朋友都是爬取豆瓣信息为案例,我不想重复,就使用了爬取51cto博客网站信息为案例,这里以我的博客页面为教程,编写的Python代码! 实验环境 1.安装Python 3.7 2.安装requests, bs4模块 实验步骤 1.安装Python3.7环境 2.安装requests,bs4 模块 打开cmd,输入:pip install requests -i https://pypi.tuna.tsi

  • Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客

    VuePress vuepress是尤大大4月12日发布的一个全新的基于vue的静态网站生成器,实际上就是一个vue的spa应用,内置webpack,可以用来写文档. 一个基于 Vue SSR 的静态站生成器,本来的目的是爽爽的写文档,但是我发现用来撸一个人博客也非常不错. 这是VuePress的官方文档 上手搭建 你可以跟着文档上的例子自己玩一玩,不过由于VuePress的文档也是用VuePress来实现的,所以我取巧直接拿VuePress仓库中的docs目录拿来玩耍. 1.首先安装VuePr

  • Flask入门教程实例:搭建一个静态博客

    现在流行的静态博客/网站生成工具有很多,比如 Jekyll, Pelican, Middleman, Hyde 等等,StaticGen 列出了目前最流行的一些静态网站生成工具. 我们的内部工具由 Python/Flask/MongoDB 搭建,现在需要加上文档功能,写作格式是 Markdown,不想把文档放到数据库里,也不想再弄一套静态博客工具来管理文档,于是找到了 Flask-FlatPages 这个好用的 Flask 模块.熟悉 Flask 的同学花几分钟的时间就可以用搭建一个简单博客,加

  • python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解

    这篇博客是自己<数据挖掘与分析>课程讲到正则表达式爬虫的相关内容,主要简单介绍Python正则表达式爬虫,同时讲述常见的正则表达式分析方法,最后通过实例爬取作者的个人博客网站.希望这篇基础文章对您有所帮助,如果文章中存在错误或不足之处,还请海涵.真的太忙了,太长时间没有写博客了,抱歉~ 一.正则表达式 正则表达式(Regular Expression,简称Regex或RE)又称为正规表示法或常规表示法,常常用来检索.替换那些符合某个模式的文本,它首先设定好了一些特殊的字及字符组合,通过组合的&

  • 使用Python实现博客上进行自动翻页

    先上一张代码及代码运行后的输出结果的图! 下面上代码: # coding=utf-8 import os import time from selenium import webdriver #打开火狐浏览器 需要V47版本以上的 driver = webdriver.Firefox()#打开火狐浏览器 url = "http://codelife.ecit-it.com"#这里打开我的博客网站 driver.get(url)#设置火狐浏览器打开的网址 time.sleep(2) #使

随机推荐