##回帖功能
模板所在位置: `/theme/default/detail.html`
PHP页面 `detail.php`
##页面功能说明
detail.php页面可以展示、也可以回复,还能够实现删贴、高亮、精华、屏蔽等操作。
####操作流程
1. 加载基础
2. 判断是否
3. 判断get或者post传入的类型是什么
4. 若是回复则走回复流程,若是删除、精华、屏蔽则走对应的流程
5. 将回复内容和SQL语句准备完成,并写入数据库
6. 失败报错
7. 成功则提示成功,送金币跳转回原贴地址
##回贴、删除、置顶功能流程图
![](https://box.kancloud.cn/2015-10-23_5629a9b9d1600.png)
##整体代码演示
~~~
<?php
/**
* 帖子详情
*/
include './common/common.php';
//判断帖子ID是否存在
if(empty($_REQUEST['id']) || !is_numeric($_REQUEST['id']))
{
$msg = '<font color=red><b>禁止非法操作</b></font>';
$url = $_SERVER['HTTP_REFERER'];
$style = 'alert_error';
$toTime = 3000;
include 'notice.php';
}
$Id=$_REQUEST['id'];
//保存帖子回复
if($_POST['replysubmit'])
{
//判断用户是否登录
if(!$_COOKIE['uid']){
$notice='抱歉,您尚未登录';
include 'close.php';
exit;
}
$tid = $Id; //跟帖时记录贴子ID
$authorid = $_COOKIE['uid']; //发布人ID
$content = strMagic($_POST['message']); //内容
$addtime = time(); //发表时间
$addip = ip2long($_SERVER['REMOTE_ADDR']); //发布人IP
$classId = $_POST['classid']; //类别ID
$n='first, tid, authorid, content, addtime, addip, classid';
$v='0, '.$tid.', '.$authorid.', "'.$content.'", '.$addtime.', '.$addip.', '.$classId.'';
$result = dbInsert('details', $n, $v);
if(!$result)
{
$msg = '<font color=red><b>回复失败,请联系管理员</b></font>';
$url = $_SERVER['HTTP_REFERER'];
$style = 'alert_error';
$toTime = 3000;
include 'notice.php';
exit;
}else{
$money = REWARD_H; //回帖赠送积分
$result = dbUpdate('user', "grade=grade+{$money}", 'uid='.$_COOKIE['uid'].'');
//更新帖子的回复数量[replycount]
$result = dbUpdate('details', 'replycount=replycount+1', 'id='.$tid.'');
//更新版块表的回复数量[replycount]
$result = dbUpdate('category', 'replycount=replycount+1', 'cid='.$classId.'');
//header('location:detail.php?id='.$Id);
$msg = '<font color=red><b>帖子回复成功</b></font>';
$url = 'detail.php?id='.$Id;
$style = 'alert_right';
$toTime = 3000;
include 'notice.php';
$msg = '回帖赠送';
include 'layer.php';
exit;
}
}
//点击帖子时访问次数加1
$result = dbUpdate('details', 'hits=hits+1', 'id='.$Id.' and isdel=0 and first=1');
if(!$result)
{
$msg = '<font color=red><b>您浏览的帖子不存在或已被删除</b></font>';
$url = $_SERVER['HTTP_REFERER'];
$style = 'alert_error';
$toTime = 3000;
include 'notice.php';
}
//读取帖子信息
$TiZi = dbSelect('details','*','id='.$Id.' and isdel=0 and first=1','',1);
$authorid = $TiZi[0]['authorid']; //作者ID
$Title = $TiZi[0]['title']; //标题
$Content = $TiZi[0]['content']; //内容
$Addtime = getFormatTime($TiZi[0]['addtime']); //发布时间
$classId = $TiZi[0]['classid']; //版块ID
$Replycount = $TiZi[0]['replycount']; //回复数量
$Hits = $TiZi[0]['hits']; //点击数量
$Elite = $TiZi[0]['elite']; //精华
$Rate = $TiZi[0]['rate']; //所需积分数量
//读取上一条
$top = dbSelect('details','id','id>'.$Id.' and isdel=0 and first=1','id desc',1);
if($top)
{
$topid=$top[0]['id'];
}else{
$topid=false;
}
//读取下一条
$down = dbSelect('details','id','id<'.$Id.' and isdel=0 and first=1','id desc',1);
if($down){
$downid = $down[0]['id'];
}else{
$downid = false;
}
//读取导航索引
$category = dbSelect('category','cid,classname,parentid,compere','parentid<>0 and cid='.$classId.'','',1);
if($category)
{
$smallName = $category[0]['classname'];
$smallId = $category[0]['cid'];
$BanZhu = $category[0]['compere'];
$parentCategory = dbSelect('category','cid,classname','cid='.$category[0]['parentid'].'','',1);
if($parentCategory)
{
$bigName=$parentCategory[0]['classname'];
$bigId=$parentCategory[0]['cid'];
}else{
$msg = '<font color=red><b>非法操作</b></font>';
$url = $_SERVER['HTTP_REFERER'];
$style = 'alert_error';
$toTime = 3000;
include 'notice.php';
exit;
}
}else{
$msg = '<font color=red><b>非法操作</b></font>';
$url = $_SERVER['HTTP_REFERER'];
$style = 'alert_error';
$toTime = 3000;
include 'notice.php';
exit;
}
//读取会员信息
$User = dbSelect('user','username,email,udertype,regtime,lasttime,picture,autograph,grade','uid='.$authorid.'','',1);
if($User)
{
$U_sername = $User[0]['username'];
$E_mail = $User[0]['email'];
$U_dertype = $User[0]['udertype'];
$R_egtime = formatTime($User[0]['regtime'],false);
$L_asttime = formatTime($User[0]['lasttime'],false);
$P_icture = $User[0]['picture'];
$A_utograph = $User[0]['autograph'];
$G_rade = $User[0]['grade'];
}
//该主题下的所有回复数量
$TZCount = dbFuncSelect('details','count(id)','tid='.$Id.' and isdel=0 and first=0');
$zCount = $TZCount['count(id)'];
$linum = 10;
$Lpage = empty($_GET['page'])?1:$_GET['page'];
//循环帖子回复信息
$select = 't.id as id,t.isdisplay as isdisplay,t.authorid as authorid,t.content as content,t.addtime as addtime,t.addip as addip,t.isdel as isdel,t.elite as elite,u.username as username,u.email as email,u.udertype as udertype,u.regtime as regtime,u.lasttime as lasttime,u.picture as picture,u.autograph as autograph,u.grade as grade';
$HTiZi = dbDuoSelect('details as t','user as u',' on t.authorid=u.uid',null,null,$select,'t.tid='.$Id.' and t.isdel=0 and t.first=0','t.id asc', setLimit($linum));
$title = $Title.' - '.WEB_NAME;
$ggg = 'iPhone 游戏软件分享区';
//查找版主或管理员
$NBanZhu = explode(',',$BanZhu);
if(in_array($_COOKIE['uid'], $NBanZhu))
{
$GuanLi=true;
}else{
if($_COOKIE['udertype'])
{
$GuanLi=true;
}
}
//给帖子付款
if(!empty($_POST['paysubmit']))
{
//判断用户是否登录
if(!$_COOKIE['uid'])
{
$notice='抱歉,您尚未登录';
include 'close.php';
exit;
}
foreach($_POST['oidarr'] as $key=>$val)
{
$nval=explode(',',$val);
//将order表中的ispay更新为1
$res = dbUpdate('order', 'ispay=1', 'oid='.$key.'');
//扣钱
$res = dbUpdate('user', 'grade=grade-'.$nval[1].'', 'uid='.$_COOKIE['uid'].'');
//给作者加钱
$res = dbUpdate('user', 'grade=grade+'.$nval[1].'', 'uid='.$nval[0].'');
}
header('location:detail.php?id='.$Id);
exit;
}
//删除未购买的帖子
if(!empty($_POST['delsubmit']))
{
//判断用户是否登录
if(!$_COOKIE['uid'])
{
$notice='抱歉,您尚未登录';
include 'close.php';
exit;
}
$arrOid = array_keys($_POST['oidarr']);
$NarrOid = join(',',$arrOid);
$result = dbDel('order', 'oid in('.$NarrOid.')');
header('location:detail.php?id='.$Id);
exit;
}
//购买帖子,点击及加入订单表
if(!empty($_GET['pay']))
{
//判断用户是否登录
if(!$_COOKIE['uid'])
{
$notice='抱歉,您尚未登录';
include 'close.php';
exit;
}
//查询订单表中是否有这个购买记录
$select = 't.title as title,t.authorid as authorid,o.oid as oid,o.tid as tid,o.uid as uid,o.rate as rate';
$IsOrder = dbDuoSelect('order as o','details as t',' on o.tid=t.id',null,null,$select,'o.uid='.$_COOKIE['uid'].' and t.id='.$Id.'','o.oid asc',1);
if(!$IsOrder)
{
//如果没有购买记录,加入订单表
$Oresult = dbInsert('order', 'uid,tid,rate,addtime,ispay', $_COOKIE['uid'].','.$Id.','.$Rate.','.time().',0');
}
//读取这个用户还没有付款的记录
$OrderList = dbDuoSelect('order as o','details as t',' on o.tid=t.id',null,null,$select,'o.uid='.$_COOKIE['uid'].' and o.ispay=0','o.oid asc');
$allpay = dbFuncSelect('order','sum(rate ) as zpay','uid='.$_COOKIE['uid'].' and ispay=0');
}
//检查当前浏览用户是否已付费
$MyOrder = dbSelect('order','*','uid='.$_COOKIE['uid'].' and ispay=1 and tid='.$Id.'','oid asc',1);
if($GuanLi){
//删除,放入回收站
if(!empty($_GET['del'])){
$result = dbUpdate('details', "isdel=1", 'id='.$Id.'');
header('location:index.php');
}
//置顶
if(!empty($_GET['istop'])){
$result = dbUpdate('details', "istop=1", 'id='.$Id.'');
header('location:detail.php?id='.$Id);
}
//高亮
if(!empty($_GET['style'])){
$result = dbUpdate('details', "style='red'", 'id='.$Id.'');
header('location:detail.php?id='.$Id);
}
//精华
if(!empty($_GET['elite'])){
$result = dbUpdate('details', "elite=1", 'id='.$Id.'');
header('location:detail.php?id='.$Id);
}
//删除回帖,放入回收站
if(!empty($_GET['delht'])){
$result = dbUpdate('details', "isdel=1", 'id='.$_GET['hid'].'');
header('location:detail.php?id='.$Id);
}
//回帖置顶
if(!empty($_GET['istopht'])){
$result = dbUpdate('details', "istop=1", 'id='.$_GET['hid'].'');
header('location:detail.php?id='.$Id);
}
//回帖屏蔽
if(!empty($_GET['isdislpay'])){
$result = dbUpdate('details', "isdisplay=1", 'id='.$_GET['hid'].'');
header('location:detail.php?id='.$Id);
}
}
include template("detail.html");
~~~
- 01. 为什么选择本书学习PHP
- 1.1 为什么学习PHP?
- 1.2 PHP是什么
- 1.3 零基础也能学习
- 1.4 为什么有些人学不会
- 02.PHP的环境安装
- 2.1开发环境是什么?
- 2.2 windows环境安装
- 2.3 Linux环境安装
- 2.4 其他开发环境
- 2.5 写代码的工具选择
- 03. PHP基本语法
- 3.1 PHP基本语法
- 3.1.1 写出你的第一段PHP代码
- 3.1.2 读过初中你就会变量
- 3.1.3 echo 显示命令
- 3.1.4 注释的功能很强大
- 3.2 数据类型并不神秘
- 3.2.1 整型就是整数
- 3.2.2 布尔就是易经的知识
- 3.2.3 字符串
- 3.2.4 浮点型
- 3.2.5 重要:if和else语法
- 3.2.6 NULL类型
- 3.2.7对象以后会学
- 3.2.8 数组会有单纯的一个章节
- 3.2.9 资源类型
- 3.2.10 眼前了解回调类型即可
- 3.2.11 查看和判断数据类型
- 3.2.12 数据类型的自动转换和强制转换
- 3.3 常量和变量
- 3.3.1 用常量限制用户跳过某些文件
- 3.3.2 可变变量
- 3.3.3 外部变量
- 3.3.4 环境变量
- 3.3.5 变量引用
- 3.4 PHP表达式与运算符
- 3.4.1 算术运算
- 3.4.2 赋值运算
- 3.4.3 自加、自减运算
- 3.4.4 比较运算
- 3.4.5 逻辑运算
- 3.4.6 位运算
- 3.4.7 运算符优先级
- 3.4.8 三元运算符和其它运算符
- 04. PHP中的流程控制
- 4.1 if条件结构流程
- 4.1.1 if语句
- 4.1.2 嵌套if...else...elseif结构
- 4.1.3 if语句多种嵌套
- 4.2 分支结构switch语句的使用
- 4.3 循环语句的使用
- 4.3.1 while循环
- 4.3.2 do...while循环的区别
- 4.3.3 for循环控制语句
- 4.3.4 goto语法
- 4.3.5 declare 语法
- 05.PHP的函数基本语法
- 5.1 自定义函数
- 5.2 自定义函数高级调用
- 5.2.1 回调函数
- 5.2.2 变量函数
- 5.2.3 匿名函数
- 5.2.4 内部函数
- 5.2.5 变量作用域
- 5.2.6 参数的引用
- 5.2.7 递归函数
- 5.2.8 静态变量
- 5.3 使用系统内置函数
- 5.4 文件包含函数
- 5.5 数学常用函数
- 5.6 日期常用函数
- 5.6.1 获取时期时间信息函数
- 5.6.2 日期验证函数
- 5.6.3 获取本地化时间戳函数
- 5.6.4 程序执行时间检测
- 5.7 字符串常用函数
- 06.PHP数组与数据结构
- 6.1 数组的定义
- 6.2 数组的操作
- 6.2.1 数组的计算
- 6.2.2 for循环遍历索引数组
- 6.2.3 foreach遍历关联数组
- 6.2.4 list、each函数遍历数组
- 6.2.5 常用操作数组函数
- 6.3 数组的常用函数
- 07. PHP中的正则达达式
- 7.1 正则表达示的定界符
- 7.2 正则表达示中的原子
- 7.3 正则表示中的元字符
- 7.4 正则达达示中的模式修正符
- 7.5 写正则的诀窍和常用正则
- 7.6 用正则写一个UBB文本编辑器
- 08.文件系统
- 8.1 读取文件
- 8.2 创建和修改文件内容
- 8.3 创建临时文件
- 8.4 移动、拷贝和删除文件
- 8.5 检测文件属性函数
- 8.6 文件常用函数和常量
- 8.7 文件锁处机制
- 8.8 目录处理函数
- 8.9 文件权限设置
- 8.10文件路径函数
- 8.11 小小文件留言本
- 8.12 修改配置文件的实例
- 09.PHP文件上传
- 9.1 文件上传需要注意php.ini文件
- 9.2 文件上传的步骤
- 9.3 文件上传表单注意事项
- 9.4 按照数组和步骤完成文件上传
- 9.5 多文件上传
- 9.6 文件上传进度处理
- 10.PHP图像处理
- 10.1 学习前的准备工作
- 10.2 用图片处理函数画一张图
- 10.3 生成验证码
- 10.4 图像缩放和裁剪技术
- 10.5 图片水印处理
- 11.错误处理
- 11.1 禁止显示错误
- 11.2 错误报告级别
- 11.3 错误记录日志
- 11.4 自定义错误处理函数
- 12.MySQL 入门
- 12.1 请进入《MySQL入门》
- 13. PHP操作mysql数据库
- 13.1 数据库连接步骤
- 13.2 通过步骤做一个用户注册
- 13.3 通过步骤做一个列表显示
- 13.4 把用户做个分页
- 13.5 批量和指定删除用户
- 13.6 修改用户信息
- 13.7 数据显示乱码终极解决办法
- 14.会话管理和控制
- 14.1 Cookie概述
- 14.2PHP中的Cookie
- 14.3 session概述
- 14.4 PHP中使用session
- 14.5 SESSION应用实例
- 15.通过cURL来做小偷程序
- 15.1 curl的使用步骤
- 15.2 自定义get方法抓取网页
- 15.3 使用post发送数据
- 16. 用PHP写一个论坛
- 16.1 web2.0始于论坛
- 16.2 需求:开发前你要知道他的样子
- 16.3 核心业务流程
- 16.3.1 用户注册流程
- 16.3.2 普通用户和管理员登陆流程
- 16.3.3 发贴流程
- 16.3.4 回复流程
- 16.3.5 版块管理流程
- 16.3.6 版主业务流程
- 16.3.7 金币奖励和消耗流程
- 16.4 数据库表设计
- 16.5 文件和代码规范
- 16.6 核心功能说明
- 16.6.1 项目目录结构说明
- 16.6.2 公共文件的使用
- 16.6.3 模板引擎讲解
- 16.6.4 用户注册、登陆功能讲解
- 16.6.5 发帖功能讲解
- 16.6.6 回帖功能讲解
- 16.6.7 项目安装模块讲解
- 附录1. 版权声明
- 附录2 . 学习PHP常用的英文单词