本文最后更新于 2024-06-04,文章内容可能已经过时。

地府管理系统

这是一个PHP结课作业制作

开发环境:

编程语言:PHP v8.0 ,MySQL v8 ,Nginx v1.25.2 ,layui v2.9.9 ,Swiper v11.0.3
开发工具:PhpStorm ,DataGrip ,phpstudy_pro ,ChatGPT plus

致谢(不分先后顺序)

感谢JetBrains公司提供的正版教育优惠

感谢古险峰老师这学期的细心教导

感谢ChatGPT助力我的开发

项目模块名称 涉及技术栈 项目人员 进度
前端展示页设计/开发/素材 PHP v8.0 ,Swiper v11.0.3 康嘉顺 已完成
Login Registration 页面开发 PHP v8.0 康嘉顺 已完成
SQL 表设计开发(数据库配置文件位置 login/admin/db_config.php) MySQL v8.0 康嘉顺 已完成
后端页面开发 Layui v2.9.9 康嘉顺 已完成
项目测试,前后端联调 康嘉顺 已完成

一,前端设计开发

前端使用本节课所教学的php来开发,主要用于简单的展示死亡名单

image-20240601062745004

注:前端展示页面设计参考来源于各大纪念日,灰黑色配色,底部用到了开源框架Swiper来简化开发

二,Login Registration 页面开发

这里我偷懒了,拿了以前开发的一个登录页来使用

image-20240515150316947

image-20240515150340695

核心代码包括check.php是用来校验数据合法性,以及加密

<?php
session_start();
require_once './admin/tools/core.php';

// 数据库连接注意修改!
require_once './admin/db_config.php';  // 包含数据库配置文件
$link = getDatabaseConnection(); // 获取数据库连接

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 如果是注册表单提交
    if (isset($_POST["signUpSubmit"])) {
        // 获取注册表单中的数据
        $signUpName = $_POST["signUpName"];
        $signUpPassword = $_POST["signUpPassword"];
        $job = $_POST["position"];

        // 验证用户注册信息
        if (!preg_match("/^[a-zA-Z0-9_@]{2,20}$/", $signUpName)) {
            echo "<script>alert('用户名格式不正确!'); window.location.href = 'login.php';</script>";
            exit();
        }
        if (!preg_match("/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d_@]{6,20}$/", $signUpPassword)) {
            echo "<script>alert('密码格式不正确!'); window.location.href = 'login.php';</script>";
            exit();
        }

        // 使用md5加密密码
        $hashedPassword = md5($signUpPassword);

        // 进行其他操作,如数据库插入等
        $sql = "INSERT INTO admin_user (username, job, password, create_time, update_time) 
                VALUES ('$signUpName', '$job', '$hashedPassword', NOW(), NOW())";

        if (mysqli_query($link, $sql)) {
            echo "<script>alert('注册成功!'); window.location.href = 'login.php';</script>";
        } else {
            echo "<script>alert('注册失败: " . mysqli_error($link) . "'); window.location.href = 'login.php';</script>";
        }
    }

    // 如果是登录表单提交
    if (isset($_POST["signInSubmit"])) {
        $signInNum = $_POST["signInNum"];
        $signInPassword = $_POST["signInPassword"];

        // 修改SQL查询以包括id
        $sql = "SELECT id, password FROM admin_user WHERE username=?";
        $stmt = mysqli_prepare($link, $sql);
        if (!$stmt) {
            echo "<script>alert('数据库查询失败'); window.location.href = 'login.php';</script>";
            exit;
        }
        mysqli_stmt_bind_param($stmt, "s", $signInNum);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($stmt, $id, $storedPassword);

        if (mysqli_stmt_fetch($stmt)) {
            // 使用MD5对用户输入的密码进行散列,并与数据库中的散列进行比较
            if (md5($signInPassword) == $storedPassword) {
                // 重生成会话ID
                session_regenerate_id();
                // 保存用户名和用户ID到会话
                $_SESSION['username'] = $signInNum;
                $_SESSION['id'] = $id;
                header("Location: admin/index.php");
                exit();
            } else {
                echo "<script>alert('登录失败:用户名或密码错误!'); window.location.href = 'login.php';</script>";
            }
        } else {
            echo "<script>alert('登录失败:用户名或密码错误!'); window.location.href = 'login.php';</script>";
        }
        mysqli_stmt_close($stmt);
    }

}

mysqli_close($link);
?>

三,SQL 表设计开发

分别设计了三个表(管理员表,客户表,死亡详情表)

1 ,管理员表

-------------------------------主要代码---------------------------------
DROP TABLE IF EXISTS `admin_user`;
CREATE TABLE `admin_user`  (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '管理员名',
  `job` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '职位',
  `password` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

2,客户表

-------------------------------主要代码---------------------------------
DROP TABLE IF EXISTS `client`;
CREATE TABLE `client`  (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '客户主键id',
  `user_photo` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户照片',
  `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '姓名',
  `del_age` int NULL DEFAULT NULL COMMENT '死亡时年龄',
  `id_card_num` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '身份证号',
  `state` tinyint(1) NOT NULL COMMENT '生死状态1:死 0:生',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `client_pk_2`(`name` ASC) USING BTREE,
  UNIQUE INDEX `client_pk_3`(`id_card_num` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

3,死亡详情

-------------------------------主要代码---------------------------------
DROP TABLE IF EXISTS `die_msg`;
CREATE TABLE `die_msg`  (
  `c_id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `die_time` datetime NOT NULL COMMENT '死亡时间',
  `del_res` char(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '死亡原因',
  PRIMARY KEY (`c_id`) USING BTREE,
  CONSTRAINT `c_id` FOREIGN KEY (`c_id`) REFERENCES `client` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 41 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '死亡信息' ROW_FORMAT = Dynamic;

表中主要定义了如下字段

20240515141202

四,后端页面开发

后端用到了php主流的框架layui构建,主要展示了

页面名称(文件夹位置) 页面功能 开发者 开发进度
1,欢迎页(welcome.php) 登陆后台后只展示一边,用来欢迎! 康嘉顺 已完成!
2,录入生死簿(add) 用来添加生死簿成员(姓名,身份证号码,头像) 康嘉顺 已完成!
3,管理生死簿(manage) 用来 展示/编辑/删除 生死簿中的所有人,以及详细信息 康嘉顺 已完成!
4,死亡名单(menu) 主要目的是为了显示已经处死的人员及其死亡信息 康嘉顺 已完成!
5,个人设置(setting) 用来展示与编辑管理员密码,职位 康嘉顺 已完成!

1,欢迎页(welcome.php)

欢迎页没什么可以介绍的,珠岙就是展示欢迎信息

20240515142234

2,录入生死簿(add)

这一部分主要是新增人员名单用的,管理员输入用户信息点击提交就会上传到addcheck.php校验程序来校验信息合法性,核心代码如下

20240515142707

校验程序addcheck.php通过校验之后会上传到sql中

20240515142828

实现效果!

20240515142404

3,管理生死簿(manage)

image-20240515143807571

管理员通过管理生死簿模块可以对生死簿上的成员进行操作 如 删除/修改manage.php,当我们使用修改按钮的时候会向edit.php传入一个id值,可以使edit.php页面接收到你选择操作id对应的用户

image-20240515144157278

我在edit.php这个页面拿到用户的id后从数据库查询到用户信息,并做了回显操作,使页面更优雅。

image-20240515144449190

生死状态按钮一但选中,则会弹出一个附加信息的按钮这个按钮选择后会弹窗让我们添加额外信息,并且加入获取当前时间的按钮,让操作更简单

image-20240515144604025

当我们需要删除某个用户的时候,我们点击删除,他会给个二次警告

image-20240515144726751

当我们点击确定的时候,会将用户id传入del.php中进行下一步操作,此时del.php程序会判断die_msg(死亡详情)表中是否存在数据,如果存在数据,责先删除外键del.php中的数据,在删除clien中的数据,这里运用到了多表操作

image-20240515145103680

4,死亡名单(menu)

这里展示死亡用户的详细信息,也是用到了多表联查

image-20240515145345576

这里也提供了编辑和删除功能,有些不同的就是这里的编辑多了一些选项,包括对死亡时间的修改以及死亡原因的修改

image-20240515145624117

这里的删除和管理生死簿的删除逻辑大致一样

image-20240515145749695

5,个人设置(setting)

个人设置就比较简单了,提供了管理员信息的回显以及密码和职位的修改功能

image-20240515145920226

五,项目测试,前后端联调

整体项目已经调试,前后端功能正常,无明显bug