Web开发-简单BBS论坛
Web开发-简单BBS论坛
开发了两周的bbs论坛系统,总算在上周完成了,并且已经把项目文件上传到github上了。[我的bbs]。。。
开发完之后,感觉对sql语句、mysql函数和PHP代码有了深刻的理解。同时了解了开发流程。。好像收获很多耶!!!总结一下吧。。。
大致思路
需求
- 浏览者有浏览任何版块、任何帖子以及任何回复的权限,并且任何浏览者都有注册成为本论坛的用户的权限。
- 注册用户比浏览者多了发帖,回复帖子的权限,且具有成为某子版块版主的机会
- 版主比注册用户多出删除本版块帖子和相关回复的权限
- 管理员具有操作网站后台的权限(比如设置版块、更改站点信息、帖子管理、用户管理等)
功能
数据库设计
*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/:存放上传文件
其他各种文件
开发步骤
- 前台与后台的界面
- 后台-父版块
- 后台-子版块
- 前台-用户注册
- 前台-用户发帖
- 前台-帖子列表页
- 前台-帖子内容页
- 前台-帖子回复
- 前台-首页
- 前台-用户中心
等等…
开发步骤实现
准备
因为写总结时,功能已经实现。所以把开发过程中的一些准备,直接都写出来了。
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','密码');
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文件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>
//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><?phpif(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><?phpif(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>
//footer.inc.php
</body>
</html>
效果
二、后台-父版块
父版块列表页
要实现上述效果。
思路
首先,引入文件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><?phpwhile($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
?>
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','对不起删除失败,请重试!');
}
?>
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
?>
在对父版块的操作中,只有删除和修改是不够的。还应该有父版块添加页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
?>
父版块添加页效果如下:
三、后台-子版块
子版块列表页
实现上述效果。除了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><?phpwhile($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
?>
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','对不起删除失败,请重试!');
}
?>
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'?>
**同样,在子版块中,只有子版块列表是不够的。所以,也要实现子版块的添加。**其中应该选择一个所属父版块,用<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'?>
四、后台-管理员
管理员列表
除操作数据表外,大致和父版块类似。要注意的是,管理员有超级管理员和普通管理员,超级管理员可以添加删除管理员,普通管理员不具有管理管理员操作权限。
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?>
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','对不起删除失败,请重试!');
}
?>
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?>
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>
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 variablessession_destroy();//销毁一个会话中的全部数据setcookie(session_name(),'',time()-3600,'/');//销毁保存在客户端的卡号(session id)header('Location:login.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自带查询配置信息语句。
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();
?>
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
?>
后台的基本功能已经实现了大部分,剩余的与前台有点关联,暂且先不做总结。。
感悟:
总结之后,对论坛后台开发,又有了新的认识。且熟悉了基本开发思路和流程。。后续我将会把论坛前台开发再总结一下。希望再次有所收获。。。小白进阶ing。。。。
Web开发-简单BBS论坛相关推荐
- html5移动web开发简答题,HTML5移动Web开发简单知识点介绍
原标题:HTML5移动Web开发简单知识点介绍 1 :基于HTML5的移动Web应用 Canvas绘图:通过获取HTML中的Dom元素Canvas,调用其渲染上下文的Context对象,使用Js进行图 ...
- 原创+源码 基于Java Web技术开发的BBS论坛系统
本文转自:程序员之家论坛 原文地址:http://www.phome.asia/forum/thread/20601.htm 我已把附件上传到csdn下载频道地址:http://download.c ...
- Django小项目简单BBS论坛
开发一个简单的BBS论坛 项目需求: 1 整体参考"抽屉新热榜" + "虎嗅网" 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用 ...
- web开发 简单的html2
文章目录 块级元素 行内元素 html字符实体 引用 格式化元素 排序 ol 案例:二级菜单 块级元素 块级元素总是在新的行上开始,并尽可能的占据本行全部可用的宽度 常见的有 <address& ...
- web开发 简单的html
文章目录 meta style css base script 注释 第一个html <!DOCTYPE html> <html><head><title&g ...
- web开发 简单的css1 样式和选择器
文章目录 样式 内联样式 内部样式表 外部样式表 选择器 伪元素选择器 伪类选择器 UI伪类选择器 结构伪类选择器 其他伪类选择器 总结 属性选择器 样式 内联样式 <!DOCTYPE html ...
- 基于php的bbs论坛教程,基于PHPMySQL技术BBS论坛
基于PHPMySQL技术BBS论坛Tag内容描述: 1.编号 毕 业 论 文题 目 基于 Java Web 技术开发的 BBS 论坛摘要I摘 要人类已进入 21 世纪,科学技术突飞猛进,经济知识和信息 ...
- 移动web开发rem+js适配布局开发
浏览器现状 pc端浏览器 360浏览器,谷歌浏览器,qq浏览器百度浏览器,搜狗浏览器.IE浏览器 移动端常见浏览器 uc浏览器 qq浏览器 欧朋浏览器 百度手机浏览器,360安全浏览器... 国内 ...
- Spring Boot之Web开发
Web开发 简单了解 快速上手 JSON 的支持 RESTful 的支持 支持热部署 快速上手 拦截器与过滤器 自定义过滤器 示例 自定义拦截器 示例 打包部署 多环境配置 服务器配置 项目打包 简单 ...
最新文章
- 世界银行拨款2293万美元支持印度并网屋顶太阳能
- 检测移动端内存敏感数据方法(安卓)
- asposeword.dll通过word模板生成word、PDF
- weixin微信公众号一站到底游戏代码(有点普通)
- 【Flink】Flink 1.9 升级 到 flink 1.12.4 报错 flink.client.cli.AbstractCustomCommandLine <init>
- 具体案例 快速原型模型_3D打印机器人手板模型,低成本快速原型打样
- 截取年月日在hana中怎么写_SAP HANA跟我学HANA系列之日期函数总结
- 桌面怎么新建html文件夹下,创建文件夹的步骤 怎么往新建的文件夹里写东西呀?...
- 优质的vray视频教程素材推荐,不容错过
- python房屋租赁系统的设计与实现_毕业设计---在线房屋租赁系统的设计与实现.doc...
- 这几个免费、商用图片素材网,你一定要知道。
- 矩阵最简行阶梯型计算器_一个例子看懂二次型的三种线性替换的区别
- 小程序页面生命周期函数
- ajax请求的所有状态码详解
- 华为AR系列路由器密码重置
- leetcode: Jump Game--python
- GitHub实现邀请他人一起协作
- wordpress,从本地建站开始
- 在win7下用vs2008 编译程序时出现“mt.exe停止工作”问题的解决办法
- 利用ESP8266模块实现远程用手机控制开关
热门文章
- 计算机学业水平测试质量分析,2013年(2012级)信息技术学业水平测试试卷分析...
- buck拓扑原理及仿真
- 自学python能干些什么副业好-工作多年,总结出几个比较野的副业路子!
- 大学计算机专业是几分制绩点,平均学分绩点
- 基金A,B,C类的区别
- Java面试题2020中高级,java开发内存多少够用
- 为什么说程序员是一个极度劳累的工作?
- 2.2 离散型随机变量
- 三国志战略版:Daniel_S6藤甲盾与草船借箭的故事
- gbase 导出_使用GBase 8t外部表进行高速数据导入导出