1

Web开发-简单BBS论坛

 1 year ago
source link: https://qwzf.github.io/2019/06/05/Web%E5%BC%80%E5%8F%91-%E7%AE%80%E5%8D%95BBS%E8%AE%BA%E5%9D%9B/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Web开发-简单BBS论坛

发布时间 :2019-06-05 17:32
字数:10.5k 阅读 :57

开发了两周的bbs论坛系统,总算在上周完成了,并且已经把项目文件上传到github上了。[我的bbs]。。。

开发完之后,感觉对sql语句、mysql函数和PHP代码有了深刻的理解。同时了解了开发流程。。好像收获很多耶!!!总结一下吧。。。

需求

  1. 浏览者有浏览任何版块、任何帖子以及任何回复的权限,并且任何浏览者都有注册成为本论坛的用户的权限。
  2. 注册用户比浏览者多了发帖,回复帖子的权限,且具有成为某子版块版主的机会
  3. 版主比注册用户多出删除本版块帖子和相关回复的权限
  4. 管理员具有操作网站后台的权限(比如设置版块、更改站点信息、帖子管理、用户管理等)

功能

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

数据库设计

1、数据库名称:bbs

2、数据表:

(1)father_module父版块表 字段:id、module_name、sort

(2)son_module子版块表 字段:id、father_module_id、module_name、info、member_id、sort

(3)member会员表 字段:id、username、password、photo、register_name、last_time

(4)content帖子表 字段:id、module_id、title、content、time、member_id、times

(5)reply帖子回复表 字段:id、content_id、quote_id、content、time、member_id

(6)manage管理员表 字段:id、username、password

(7) info站点信息 字段:id、title、keywords、description

程序目录结构

admin/:存放后台程序文件

inc/:存放被包含的文件

style/:存放样式、图片 (后台我使用的是css\、fonts\和images。存放样式、图片)

uploads/:存放上传文件

其他各种文件

开发步骤

  1. 前台与后台的界面
  2. 后台-父版块
  3. 后台-子版块
  4. 前台-用户注册
  5. 前台-用户发帖
  6. 前台-帖子列表页
  7. 前台-帖子内容页
  8. 前台-帖子回复
  9. 前台-首页
  10. 前台-用户中心

开发步骤实现

因为写总结时,功能已经实现。所以把开发过程中的一些准备,直接都写出来了。

mysql函数库

在与admin同级目录inc/里创建一个php文件名为mysql.inc.php。并在文件里写入相关mysql函数。代码【mysql.inc.php

同样在与admin同级目录inc/里创建一个php文件名为config.inc.php。里面包括设置时区、开启session、转换编码、设置数据库连接信息和找到绝对路径。代码如下:

<?php 
date_default_timezone_set('Asia/Shanghai');//设置时区
session_start();
header('Content-type:text/html;charset=utf-8');
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PASSWORD','199910mm');
define('DB_DATABASE','bbs');
define('DB_PORT',3306);
//项目(程序),在服务器上的绝对路径
define('SA_PATH',dirname(dirname(__FILE__)));
//项目在web根目录下面的位置(哪个目录里面)
define('SUB_URL',str_replace($_SERVER['DOCUMENT_ROOT'],'',str_replace('\\','/',SA_PATH)).'/');
?>
php复制代码
跳转和登录验证

直接跳转,执行结果信息不太明确。可以设置跳转结果显示。如图:

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

于是把该功能写在了php文件tool.inc.php。该文件中也写了会员是否登录验证和管理员是否登录的验证。

代码【tool.inc.php

后台相关验证

为了方便,我将admin目录里的inc/目录里的相关验证写在下面

1.check_father_module.inc.php

2.check_login.inc.php

3.check_manage.inc.php

4.check_son_module.inc.php

5.is_manage_login.inc.php

相关代码

后台删除确认页confirm.php

代码地址

一、前台与后台的界面

前台和后台界面可以自己用html和css写,也可以找一些模板。我为了方便,于是找了模板。。。。毕竟是主要为了练习php和sql语句以及mysql函数。

前台界面模板

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

后台界面模板

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

后台界面有点不合适,于是把顶部、底部和左侧写在不同文件,把后台界面修改了一下

header.inc.php、sidebar.inc.php和footer.inc.php(都在admin目录里的inc目录里)

//header.inc.php
<?php
$query="select * from info where id=1";
$result_info=execute($link, $query);
$data_info=mysqli_fetch_assoc($result_info);
?>
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title><?php echo $template['title'] ?> - <?php echo $data_info['title']?></title>
    <meta name="keywords" content="<?php echo $data_info['keywords']?>" />
    <meta name="description" content="<?php echo $data_info['description']?>" />
    <link rel="stylesheet" type="text/css" href="css/common.css"/>
    <link rel="stylesheet" type="text/css" href="css/main.css"/>
</head>
<body>
<div class="topbar-wrap white">
    <div class="topbar-inner clearfix">
        <div class="topbar-logo-wrap clearfix">
            <h1 class="topbar-logo none"><a href="index.html" class="navbar-brand">后台管理</a></h1>
            <ul class="navbar-list clearfix">
                <li><a class="on" href="login.html">后台首页</a></li>
                <li><a href="../index.php" target="_blank">网站首页</a></li>
            </ul>
        </div>
        <div class="top-info-wrap">
            <ul class="top-info-list clearfix">
                <li>管理员<?php echo $_SESSION['manage']['username']?></li>
                <li><a href="logout.php">注销</a></li>
            </ul>
        </div>
    </div>
</div>
php复制代码
//sidebar.inc.php
<div class="container clearfix">
    <div class="sidebar-wrap">
        <div class="sidebar-title">
            <h1>菜单</h1>
        </div>
        <div class="sidebar-content">
            <ul class="sidebar-list">
                <li>
                    <a href="#"><i class="icon-font"></i>系统</a>
                    <ul class="sub-menu">
                        <li><a href="index.php"><i class="icon-font"></i>系统信息</a></li>
                        <li><a href="manage.php"><i class="icon-font"></i>管理员</a></li>
                        <li><a href="manage_add.php"><i class="icon-font"></i>添加管理员</a></li>
                        <li><a href="system.php"><i class="icon-font"></i>站点设置</a></li>
                    </ul>
                </li>
                <li>
                    <a href="#"><i class="icon-font"></i>内容管理</a>
                    <ul class="sub-menu">
                        <li><a href="father_module.php"><i class="icon-font"></i>父版块列表</a></li>
                        <li><a href="father_module_add.php"><i class="icon-font"></i>添加父版块</a></li>
                        <?php
                        if(basename($_SERVER['SCRIPT_NAME'])=='father_module_update.php'){
                            echo '<li><a href="#"><i class="icon-font"></i>编辑父板块</a></li>';
                        }
                        ?>
                        <li><a href="son_module.php"><i class="icon-font"></i>子版块列表</a></li>
                        <li><a href="son_module_add.php"><i class="icon-font"></i>添加子版块</a></li>
                        <?php
                        if(basename($_SERVER['SCRIPT_NAME'])=='son_module_update.php'){
                            echo '<li><a href="#"><i class="icon-font"></i>编辑子板块</a></li>';
                        }
                        ?>
                        <li><a href="../index.php"><i class="icon-font"></i>帖子管理</a></li>
                    </ul>
                </li>
                <li>
                    <a href="#"><i class="icon-font"></i>用户管理</a>
                    <ul class="sub-menu">
                        <li><a href="member_list.php"><i class="icon-font"></i>用户列表</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
php复制代码
//footer.inc.php
</body>
</html>
php复制代码

效果

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

二、后台-父版块

父版块列表页

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

要实现上述效果。

首先,引入文件config.inc.php、mysql.inc.php、tool.inc.php、header.inc.php、sidebar.inc.php。

其次,连接数据库、管理员是否登录验证、写出页面标题(在页面顶部文件输出)、执行sql增删改查对father_module数据表信息进行相关操作,在修改、添加版块,引入文件进行输入内容的相关验证(check_father_module.inc.php)。

最后,在以关联数组的方式获取一条记录的数据。在定界符区域内输出id、排序和父版块的名字,以及删除和修改超链接。点击删除,跳转到father_module_delete.php,通过获取的id删除指定版块。

点击修改,跳转到father_module_update.php通过sql语句的增删改查,进行修改。

父版块代码如下:

1.father_module.php

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
$template['title']='父板块列表页';
$query="select*from father_module";
$result=execute($link,$query);
?>
<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
<div class="main-wrap">

        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="index.php">后台首页</a><span class="crumb-step">></span><span class="crumb-name">父版块列表</span></div>
        </div>
        <div class="result-wrap">
            <form name="myform" id="myform" method="post">
                <div class="result-title">
                    <div class="result-list">
                        <a href="father_module_add.php"><i class="icon-font"></i>新增板块</a>
                    </div>
                </div>
                <div class="result-content">
                    <table class="result-tab" width="100%">
                        <tr>
                            <th class="tc" width="5%"><input class="allChoose" name="" type="checkbox"></th>
                            <th>排序</th>
                            <th>ID</th>
                            <th>版块名称</th>
                            <th>操作</th>
                        </tr>
                        <?php
                        while($data=mysqli_fetch_assoc($result)){
                            $url=urlencode("father_module_delete.php?id={$data['Id']}");
                            $return_url=urlencode($_SERVER['REQUEST_URI']);
                            $message="你真的要删除父版块 {$data['module_name']} 吗?";
                            $delete_url="confirm.php?url={$url}&return_url={$return_url}&message={$message}";
$html=<<<A
                            <tr>
                                <td class="tc"><input name="id[]" value="59" type="checkbox"></td>
                                <td>
                                    <input class="common-input sort-input" name="ord[]" value="{$data['sort']}" type="text">
                                </td>
                                <td>{$data['Id']}</td>
                                <td>{$data['module_name']}</td>
                                <td>
                                    <a class="link-update" href="father_module_update.php?Id={$data['Id']}">[修改]</a>
                                    <a class="link-del" href="$delete_url">[删除]</a>
                                </td>
                            </tr>
A;
                            echo $html;
                        }
                        ?>
                    </table>
                    <!--<div class="list-page"> 2 条 1/1 页</div>-->
                </div>
            </form>
        </div>
    </div>
    <!--/main-->
</div>
<?php
include_once 'inc/footer.inc.php';//footer
?>
php复制代码

2.father_module_delete.php

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
if(!isset($_GET['id']) || !is_numeric($_GET['id'])){
    echo"<script type='text/javascript'>alert('id参数错误!');location='father_module.php';</script>";
    exit();
}
$link=connect();
include_once 'inc/is_manage_login.inc.php';
$query="delete from father_module where id={$_GET['id']}";
execute($link,$query);
if(mysqli_affected_rows($link)==1){
    skip('father_module.php','onCorrect.gif','恭喜你删除成功!');
}else{
    skip('father_module.php','onError.gif','对不起删除失败,请重试!');
}
?>
php复制代码

3.father_module_update.php

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
if(!isset($_GET['Id'])||!is_numeric($_GET['Id'])){
    skip('father_module.php','onError.gif','id参数错误!');
}
$query="select*from father_module where Id={$_GET['Id']}";
$result=execute($link,$query);
if(!mysqli_num_rows($result)){
    skip('father_module.php','onShow.gif','这个版块信息不存在!');
}
if(isset($_POST['submit'])){
    //验证用户填写的信息
    $check_flag='update';
    include 'inc/check_father_module.inc.php';
    $query="update father_module set module_name='{$_POST['module_name']}',sort={$_POST['sort']} where Id={$_GET['Id']}";
    execute($link,$query);
    if(mysqli_affected_rows($link)==1){
        skip('father_module.php','onCorrect.gif','修改成功!');
    }else{
        skip('father_module.php','onError.gif','修改失败,请重试!');
    }
}
$data=mysqli_fetch_assoc($result);
$template['title']='父板块修改页';
?>
<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
  <div class="main-wrap">
        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="father_module.php">父版块列表</a><span class="crumb-step">></span><span class="crumb-name">修改父版块-<?php echo $data['module_name']?></span></div>
        </div>
        <form method="post">
        <div class="result-content">
                    <table class="result-tab" width="70%">
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" name="" type="checkbox"></th>
                            <td>版块名称</td>
                            <td><input type="text" name="module_name" class="common-text" value="<?php echo $data['module_name']?>"/></td>
                            <td>版块名称不能为空,最多不超过40个字符</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>排序</td>
                            <td><input type="text" name="sort" class="common-text" value="<?php echo $data['sort']?>"/></td>
                            <td>填入一个数字即可</td>
                        </tr>
                    </table>
                    <br />
                    <input class="btn btn-primary btn6 mr10" type="submit" name="submit" value="修改" />
        </div>
        </form>
  </div>
</div>
<?php
include_once 'inc/footer.inc.php';//footer
?>
php复制代码

在对父版块的操作中,只有删除和修改是不够的。还应该有父版块添加页father_module_add.php。

4.father_module_add.php

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
if(isset($_POST['submit'])){
    $link=connect();
    //验证用户填写的信息
    $check_flag='add';
    include 'inc/check_father_module.inc.php';
    $query="insert into father_module(module_name,sort) values('{$_POST['module_name']}',{$_POST['sort']})";
    execute($link,$query);
    if(mysqli_affected_rows($link)==1){
        skip('father_module.php','onCorrect.gif','恭喜你,添加成功!');
    }else{
        skip('faher_module_add.php','onError.gif','对不起,添加失败,请重试!');
    }
}
$template['title']='父版块添加页';
?>
<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
  <div class="main-wrap">
        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="father_module.php">父板块列表</a><span class="crumb-step">></span><span class="crumb-name">添加父版块</span></div>
        </div>
        <form method="post">
        <div class="result-content">
                    <table class="result-tab" width="70%">
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" name="" type="checkbox"></th>
                            <td>版块名称</td>
                            <td><input type="text" name="module_name" class="common-text" /></td>
                            <td>版块名称不能为空,最多不超过40个字符</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>排序</td>
                            <td><input type="text" name="sort" class="common-text" /></td>
                            <td>填入一个数字即可</td>
                        </tr>
                    </table>
                    <br />
                    <input class="btn btn-primary btn6 mr10" type="submit" name="submit" value="添加" />
        </div>
        </form>
  </div>
</div>
<?php
include_once 'inc/footer.inc.php';//footer
?>
php复制代码

父版块添加页效果如下:

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

三、后台-子版块

子版块列表页

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

实现上述效果。除了sql语句操作的数据表(son_module)和输入内容验证文件(check_son_module.inc.php)不同外,其他和父版块类似,可以参考一下父版块的。

代码如下:

1.son_module.php

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
$template['title']='子板块列表页';
$query="select sm.id,sm.module_name,fm.module_name father_module_name,sm.member_id,sm.sort from son_module sm,father_module fm where sm.father_module_id=fm.id order by fm.id";
$result=execute($link,$query);
?>
<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
<div class="main-wrap">

        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="index.php">后台首页</a><span class="crumb-step">></span><span class="crumb-name">子版块列表</span></div>
        </div>
        <div class="result-wrap">
            <form name="myform" id="myform" method="post">
                <div class="result-title">
                    <div class="result-list">
                        <a href="son_module_add.php"><i class="icon-font"></i>新增板块</a>
                    </div>
                </div>
                <div class="result-content">
                    <table class="result-tab" width="100%">
                        <tr>
                            <th class="tc" width="5%"><input class="allChoose" name="" type="checkbox"></th>
                            <th>排序</th>
                            <th>ID</th>
                            <th>版块名称</th>
                            <th>所属父版块</th>
                            <th>版主</th>
                            <th>操作</th>
                        </tr>
                        <?php
                        while($data=mysqli_fetch_assoc($result)){
                            $url=urlencode("son_module_delete.php?id={$data['id']}");
                            $return_url=urlencode($_SERVER['REQUEST_URI']);
                            $message="你真的要删除父版块 {$data['module_name']} 吗?";
                            $delete_url="confirm.php?url={$url}&return_url={$return_url}&message={$message}";
$html=<<<A
                            <tr>
                                <td class="tc"><input name="id[]" value="59" type="checkbox"></td>
                                <td>
                                    <input class="common-input sort-input" name="ord[]" value="{$data['sort']}" type="text">
                                </td>
                                <td>{$data['id']}</td>
                                <td>{$data['module_name']}</td>
                                <td>{$data['father_module_name']}</td>
                                <td>{$data['member_id']}</td>
                                <td>
                                    <a class="link-update" href="#">[访问]</a>
                                    <a class="link-update" href="son_module_update.php?id={$data['id']}">[修改]</a>
                                    <a class="link-del" href="$delete_url">[删除]</a>
                                </td>
                            </tr>
A;
                            echo $html;
                        }
                        ?>
                    </table>
                </div>
            </form>
        </div>
    </div>
    <!--/main-->
</div>
<?php
include_once 'inc/footer.inc.php';//footer
?>
php复制代码

2.son_module_delete.php

<?php 
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
if(!isset($_GET['id']) || !is_numeric($_GET['id'])){
    skip('son_module.php','onError.gif','id参数错误!');
}
$link=connect();
include_once 'inc/is_manage_login.inc.php';
$query="delete from son_module where id={$_GET['id']}";
execute($link,$query);
if(mysqli_affected_rows($link)==1){
    skip('son_module.php','onCorrect.gif','恭喜你删除成功!');
}else{
    skip('son_module.php','onError.gif','对不起删除失败,请重试!');
}
?>
php复制代码

3.son_module_update.php

<?php 
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$template['title']='子版块修改页';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
if(!isset($_GET['id']) || !is_numeric($_GET['id'])){
    skip('son_module.php','onError.gif','id参数错误!');
}
$query="select * from son_module where id={$_GET['id']}";
$result=execute($link,$query);
if(!mysqli_num_rows($result)){
    skip('son_module.php','onError.gif','这条子版块信息不存在!');
}
$data=mysqli_fetch_assoc($result);
if(isset($_POST['submit'])){
    //验证
    $check_flag='update';
    include 'inc/check_son_module.inc.php';
    $query="update son_module set father_module_id={$_POST['father_module_id']},module_name='{$_POST['module_name']}',info='{$_POST['info']}',member_id={$_POST['member_id']},sort={$_POST['sort']} where id={$_GET['id']}";
    execute($link,$query);
    if(mysqli_affected_rows($link)==1){
        skip('son_module.php','onCorrect.gif','修改成功!');
    }else{
        skip('son_module.php','onError.gif','修改失败,请重试!');
    }
}
?>
<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
<div class="main-wrap">
        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="father_module.php">父板块列表</a><span class="crumb-step">></span><span class="crumb-name">添加子版块</span></div>
        </div>
        <form method="post">
        <div class="result-content">
                    <table class="result-tab" width="80%">
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>所属父版块</td>
                            <td>
                                <select name="father_module_id">
                                    <option value="0">===请选择一个父版块===</option>
                                    <?php
                                    $query="select*from father_module";
                                    $result_father=execute($link,$query);
                                    while ($data_father=mysqli_fetch_assoc($result_father)){
                                        if($data['father_module_id']==$data_father['Id']){
                                            echo "<option value='{$data_father['Id']}' selected='selected'>{$data_father['module_name']}</option>";
                                        }else{
                                            echo "<option value='{$data_father['Id']}'>{$data_father['module_name']}</option>";
                                        }
                                    }
                                    ?>
                                </select>
                            </td>
                            <td>*请选择一个父版块</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>版块名称</td>
                            <td><input type="text" name="module_name" value="<?php echo $data['module_name']?>" class="common-text" /></td>
                            <td>版块名称不能为空,最多不超过40个字符</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>版块简介</td>
                            <td>
                                <textarea name="info" id="txtCon" rows="6" cols="50"><?php echo $data['info']?></textarea>
                            </td>
                            <td>版块名称不能为空,最多不超过300个字符</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>版主</td>
                            <td>
                                <select name="member_id">
                                    <option value="0">===请选择一个会员作为版主===</option>
                                </select>
                            </td>
                            <td>可以选择一个会员作为版主</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>排序</td>
                            <td><input type="text" name="sort" class="common-text" value="<?php echo $data['sort']?>"/></td>
                            <td>填入一个数字即可</td>
                        </tr>
                    </table>
                    <br />
                    <input class="btn btn-primary btn6 mr10" type="submit" name="submit" value="修改" />
        </div>
        </form>
  </div>
</div>
<?php include 'inc/footer.inc.php'?>
php复制代码

同样,在子版块中,只有子版块列表是不够的。所以,也要实现子版块的添加。其中应该选择一个所属父版块,用<option>标签实现列出所有父版块的名字。

4.son_module_add.php

<?php 
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$template['title']='子版块添加页';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
if(isset($_POST['submit'])){
    //验证用户填写的信息
    $check_flag='add';
    include 'inc/check_son_module.inc.php';
    $query="insert into son_module(father_module_id,module_name,info,member_id,sort) values({$_POST['father_module_id']},'{$_POST['module_name']}','{$_POST['info']}',{$_POST['member_id']},{$_POST['sort']})";
    execute($link,$query);
    if(mysqli_affected_rows($link)==1){
        skip('son_module.php','onCorrect.gif','恭喜你,添加成功!');
    }else{
        skip('son_module_add.php','onError.gif','对不起,添加失败,请重试!');
    }
}
?>
<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
<div class="main-wrap">
        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="father_module.php">父板块列表</a><span class="crumb-step">></span><span class="crumb-name">添加子版块</span></div>
        </div>
        <form method="post">
        <div class="result-content">
                    <table class="result-tab" width="80%">
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>所属父版块</td>
                            <td>
                                <select name="father_module_id">
                                    <option value="0">===请选择一个父版块===</option>
                                    <?php
                                    $query="select*from father_module";
                                    $result_father=execute($link,$query);
                                    while($data_father=mysqli_fetch_assoc($result_father)){
                                        echo "<option value='{$data_father['Id']}'>{$data_father['module_name']}</option>";
                                    }
                                    ?>
                                </select>
                            </td>
                            <td>*请选择一个父版块</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>版块名称</td>
                            <td><input type="text" name="module_name" class="common-text" /></td>
                            <td>版块名称不能为空,最多不超过40个字符</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>版块简介</td>
                            <td>
                                <textarea name="info" id="txtCon" rows="6" cols="50"></textarea>
                            </td>
                            <td>版块名称不能为空,最多不超过300个字符</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>版主</td>
                            <td>
                                <select name="member_id">
                                    <option value="0">===请选择一个会员作为版主===</option>
                                </select>
                            </td>
                            <td>可以选择一个会员作为版主</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>排序</td>
                            <td><input type="text" name="sort" class="common-text" /></td>
                            <td>填入一个数字即可</td>
                        </tr>
                    </table>
                    <br />
                    <input class="btn btn-primary btn6 mr10" type="submit" name="submit" value="添加" />
        </div>
        </form>
  </div>
</div>
<?php include 'inc/footer.inc.php'?>
php复制代码

四、后台-管理员

管理员列表

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

除操作数据表外,大致和父版块类似。要注意的是,管理员有超级管理员和普通管理员,超级管理员可以添加删除管理员,普通管理员不具有管理管理员操作权限。

1.manage.php

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
$template['title']='管理员列表页';
?>
<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
<div class="main-wrap">
        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="index.php">后台首页</a><span class="crumb-step">></span><span class="crumb-name">管理员列表</span></div>
        </div>
        <div class="result-wrap">
            <form name="myform" id="myform" method="post">
                <div class="result-title">
                    <div class="result-list">
                        <a href="manage_add.php"><i class="icon-font"></i>新增管理员</a>
                    </div>
                </div>
                <div class="result-content">
                    <table class="result-tab" width="100%">
                        <tr>
                            <th class="tc" width="5%"><input class="allChoose" name="" type="checkbox"></th>
                            <th>ID</th>
                            <th>名称</th>              
                            <th>等级</th>
                            <th>创建日期</th>
                            <th>操作</th>
                        </tr>
                        <?php
                        $query="select*from manage";
                        $result=execute($link,$query);
                        while ($data=mysqli_fetch_assoc($result)){
                            if($data['level']==0){
                                $data['level']='超级管理员';
                            }else{
                                $data['level']='普通管理员';
                            }

                            $url=urlencode("manage_delete.php?id={$data['Id']}");
                            $return_url=urlencode($_SERVER['REQUEST_URI']);
                            $message="你真的要删除管理员 {$data['username']} 吗?";
                            $delete_url="confirm.php?url={$url}&return_url={$return_url}&message={$message}";

$html=<<<A
                            <tr>
                                <td class="tc"><input name="id[]" value="59" type="checkbox"></td>
                                <td>{$data['Id']}</td>
                                <td>{$data['username']}</td>
                                <td>{$data['level']}</td>
                                <td>{$data['create_time']}</td>
                                <td><a href="{$delete_url}">[删除]</a></td>
                            </tr>
A;
                            echo $html;
                        }
                    ?>
                    </table>
                </div>
            </form>
        </div>
    </div>
    <!--/main-->
</div>
<?php include_once 'inc/footer.inc.php';//footer?>
php复制代码

2.manage_delete.php

<?php 
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
if(!isset($_GET['id']) || !is_numeric($_GET['id'])){
    skip('manage.php','onError.gif','id参数错误!');
}
$link=connect();
include_once 'inc/is_manage_login.inc.php';
$query="delete from manage where id={$_GET['id']}";
execute($link,$query);
if(mysqli_affected_rows($link)==1){
    skip('manage.php','onCorrect.gif','恭喜你删除成功!');
}else{
    skip('manage.php','onError.gif','对不起删除失败,请重试!');
}
?>
php复制代码

3.manage_add.php

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
if(isset($_POST['submit'])){
    $link=connect();
    include 'inc/check_manage.inc.php';
    $query="insert into manage(username,password,create_time,level) values('{$_POST['username']}',md5({$_POST['password']}),now(),{$_POST['level']})";
    execute($link,$query);
    if(mysqli_affected_rows($link)==1){
        skip('manage.php','onCorrect.gif','恭喜你,添加成功!');
    }else{
        skip('manage.php','onError.gif','对不起,添加失败,请重试!');
    }
}
$template['title']='管理员添加页';
?>
<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
<div class="main-wrap">
        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="manage.php">管理员列表</a><span class="crumb-step">></span><span class="crumb-name">添加管理员</span></div>
        </div>
        <form method="post">
        <div class="result-content">
                    <table class="result-tab" width="70%">
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" name="" type="checkbox"></th>
                            <td>管理员名称</td>
                            <td><input type="text" name="username" class="common-text" /></td>
                            <td>版块名称不能为空,最多不超过32个字符</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>密码</td>
                            <td><input type="text" name="password" class="common-text" /></td>
                            <td>不能少于6位</td>
                        </tr>
                        <tr>
                            <th class="tc" width="7%"><input class="allChoose" type="checkbox"></th>
                            <td>等级</td>
                            <td>
                                <select name="level">
                                    <option value="1">普通管理员</option>
                                    <option value="0">超级管理员</option>
                                </select>
                            </td>
                            <td>请选择管理员等级,默认为普通管理员(不具备后台管理员管理权限)</td>
                        </tr>
                    </table>
                    <br />
                    <input class="btn btn-primary btn6 mr10" type="submit" name="submit" value="添加" />
        </div>
        </form>
  </div>
</div>
<?php include_once 'inc/footer.inc.php';//footer?>
php复制代码
在这里插入图片描述
在这里插入图片描述

4.管理员登录login.php

<?php
header('Content-type:text/html;charset=utf-8');
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
if(is_manage_login($link)){
    skip('index.php','onCorrect.gif','您已经登录,请不要重复登录!');
}
if(isset($_POST['submit'])){
    include_once 'inc/check_login.inc.php';
    $_POST=escape($link,$_POST);
    $query="select * from manage where username='{$_POST['username']}' and password=md5('{$_POST['password']}')";
    $result=execute($link, $query);
    if(mysqli_num_rows($result)==1){
        $data=mysqli_fetch_assoc($result);
        $_SESSION['manage']['username']=$data['username'];
        $_SESSION['manage']['password']=sha1($data['password']);
        $_SESSION['manage']['id']=$data['Id'];
        $_SESSION['manage']['level']=$data['level'];
        skip('index.php','onCorrect.gif','登录成功!');
    }else{
        skip('login.php','onError.gif','用户名或者密码错误,请重试!');
    }
}
?>
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>后台管理登录</title>
    <link href="css/admin_login.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="admin_login_wrap">
    <h1>后台管理登录</h1>
    <div class="adming_login_border">
        <div class="admin_input">
            <form method="post">
                <ul class="admin_items">
                    <li>
                        <label for="username">用户名:</label>
                        <input type="text" name="username" id="username" size="40" class="admin_input_style" />
                    </li>
                    <li>
                        <label for="password">密 码:</label>
                        <input type="password" name="password" id="password" size="40" class="admin_input_style" />
                    </li>
                    <li>
                        <label for="vcode">验证码:</label>
                        <input name="vcode" type="text" size="40" class="admin_input_style" />
                        <a href="login.php"><img class="vcode" src="../show_code.php" /></a>
                    </li>
                    <li>
                        <input type="submit" name="submit" tabindex="3" value="提交" class="btn btn-primary" />
                    </li>
                </ul>
            </form>
        </div>
    </div>
    <p class="admin_copyright"><a tabindex="5" href="index.php" target="_blank">返回首页</a> © 2019 Powered by <a href="http://qwzf.github.io" target="_blank">Q子枫</a></p>
</div>
</body>
</html>
php复制代码
在这里插入图片描述
在这里插入图片描述

5.管理员注销logout.php

<?php 
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
if(!is_manage_login($link)){
    header('Location:login.php');
}
else{
    session_unset();//Free all session variables
    session_destroy();//销毁一个会话中的全部数据
    setcookie(session_name(),'',time()-3600,'/');//销毁保存在客户端的卡号(session id)
    header('Location:login.php');
}
?>
php复制代码

五、后台-系统

1.系统信息index.php

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

要实现上述系统信息的显示,一些sql查询计数语句足矣!!

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';

$query="select * from manage where id={$_SESSION['manage']['id']}";
$result_manage=execute($link, $query);
$data_manage=mysqli_fetch_assoc($result_manage);

$query="select count(*) from father_module";
$count_father_module=num($link,$query);

$query="select count(*) from son_module";
$count_son_module=num($link,$query);

$query="select count(*) from content";
$count_content=num($link,$query);

$query="select count(*) from reply";
$count_reply=num($link,$query);

$query="select count(*) from member";
$count_member=num($link,$query);

$query="select count(*) from manage";
$count_manage=num($link,$query);

if($data_manage['level']=='0'){
    $data_manage['level']='超级管理员';
}else{
    $data_manage['level']='普通管理员';
}
$template['title']='系统信息';
?>

<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
    <div class="main-wrap">
        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><span>欢迎管理员</span></div>
        </div>
        <div class="result-wrap">
            <div class="result-title">
                <h1>系统基本信息</h1>
            </div>
            <div class="result-content">
                <ul class="sys-info-list">
                    <li>
                        <label class="res-lab">您好: </label><span class="res-info"><?php echo $data_manage['username']?></span>
                    </li>
                    <li>
                        <label class="res-lab">所属角色:</label><<span class="res-info"><?php echo $data_manage['level']?> </span>
                    </li>
                    <li>
                        <label class="res-lab">创建时间:</label><span class="res-info"><?php echo $data_manage['create_time']?></span>
                    </li>
                </ul>
            </div>
            <br />
            <div class="result-content">
                <ul>
                    <li> 
                        <span class="res-info">
                            父版块(<?php echo $count_father_module?>)
                            子版块(<?php echo $count_son_module?>)
                            帖子(<?php echo $count_content?>)
                            回复(<?php echo $count_reply?>)
                            会员(<?php echo $count_member?>)
                            管理员(<?php echo $count_manage?>)
                        </span>
                    </li>
                </ul>
            </div>
            <br />
            <div class="result-content">
                <ul>
                    <li>
                        <label class="res-lab">服务器操作系统:</label><span class="res-info"><?php echo PHP_OS?></span>
                    </li>
                    <li>
                        <label class="res-lab">服务器软件:</label><span class="res-info"><?php echo $_SERVER['SERVER_SOFTWARE']?></span>
                    </li>
                    <li>
                        <label class="res-lab">MySQL 版本:</label><span class="res-info"><?php echo  mysqli_get_server_info($link)?></span>
                    </li>
                    <li>
                        <label class="res-lab">最大上传文件:</label><span class="res-info"><?php echo ini_get('upload_max_filesize')?></span>
                    </li>
                    <li>
                        <label class="res-lab">内存限制:</label><span class="res-info"><?php echo ini_get('memory_limit')?></span>
                    </li>
                    <li>
                        <span class="res-info"><a target="_blank" href="phpinfo.php">PHP 配置信息</a></span>
                    </li>
                </ul>
            </div>
            <br />
            <div class="result-content">
                <ul>
                    <li>
                        <label class="res-lab">程序安装位置(绝对路径):</label><span class="res-info"><?php echo SA_PATH?></span>
                    </li>
                    <li>
                        <label class="res-lab">程序在web根目录下的位置(首页的url地址):</label><span class="res-info"><?php echo SUB_URL?></span>
                    </li>
                    <li>
                        <label class="res-lab">程序版本:</label><span class="res-info">Qwzf V1.0 <a target="_blank" href="#">[查看最新版本]</a></span>
                    </li>
                    <li>
                        <label class="res-lab">程序作者:</label><span class="res-info">Qwzf </span>
                    </li>
                </ul>
            </div>
            <br />
        </div>
    </div>
    <!--/main-->
</div>
<?php include_once 'inc/footer.inc.php';//footer?>
php复制代码

查看PHP配置信息时跳转到另一个页面,用PHP自带查询配置信息语句。

phpinfo.php

<?php 
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';//验证管理员是否登录
phpinfo();
?>
php复制代码

2.站点设置system.php

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

这是一个表单提交,提交网站标题、关键字、描述到数据库。且把网站标题从数据库查询,在页面标题处输出,即在顶部文件header.inc.php输出该页查询的网站标题。

<?php
include_once '../inc/config.inc.php';
include_once '../inc/mysql.inc.php';
include_once '../inc/tool.inc.php';
$link=connect();
include_once 'inc/is_manage_login.inc.php';
$query="select * from info where Id=1";
$result_info=execute($link, $query);
$data_info=mysqli_fetch_assoc($result_info);
if(isset($_POST['submit'])){
    $_POST=escape($link,$_POST);
    $query="update info set title='{$_POST['title']}',keywords='{$_POST['keywords']}',description='{$_POST['description']}' where Id=1";
    execute($link, $query);
    if(mysqli_affected_rows($link)==1){
        skip('system.php','onCorrect.gif','修改成功!');
    }else{
        skip('system.php','onError.gif','修改失败,请重试!');
    }
}
$template['title']='站点设置页';
?>

<?php
include_once 'inc/header.inc.php';//top
include_once 'inc/sidebar.inc.php';//sidebar
?>
    <div class="main-wrap">
        <div class="crumb-wrap">
            <div class="crumb-list"><i class="icon-font"></i><a href="index.php">首页</a><span class="crumb-step">></span><span class="crumb-name">站点设置</span></div>
        </div>
        <div class="result-wrap">
            <form method="post">
                <div class="config-items">
                    <div class="config-title">
                        <h1><i class="icon-font"></i>网站信息设置</h1>
                    </div>
                    <div class="result-content">
                        <table width="100%" class="insert-tab">
                                <tr>
                                    <th><i class="require-red">*</i>网站标题:</th>
                                    <td><input type="text" id="" value="<?php echo $data_info['title']?>" size="85" name="title" class="common-text"></td>
                                </tr>
                                <tr>
                                    <th><i class="require-red">*</i>关键字:</th>
                                    <td><input type="text" id="" value="<?php echo $data_info['keywords']?>" size="85" name="keywords" class="common-text"></td>
                                </tr>
                                <tr>
                                    <th><i class="require-red">*</i>描述:</th>
                                    <td><input type="text" id="" value="<?php echo $data_info['description']?>" size="85" name="description" class="common-text"></td>
                                </tr>
                                <tr>
                                    <th></th>
                                    <td>
                                        <input type="submit" value="提交" name="submit" class="btn btn-primary btn6 mr10">
                                        <input type="button" value="返回" onclick="history.go(-1)" class="btn btn6">
                                    </td>
                                </tr>
                    </div>
                </div>
            </form>
        </div>
    </div>
    <!--/main-->
</div>
<?php
include_once 'inc/footer.inc.php';//footer
?>
php复制代码

后台的基本功能已经实现了大部分,剩余的与前台有点关联,暂且先不做总结。。

感悟:

总结之后,对论坛后台开发,又有了新的认识。且熟悉了基本开发思路和流程。。后续我将会把论坛前台开发再总结一下。希望再次有所收获。。。小白进阶ing。。。。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 [email protected]

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK