/**
* 添加评论
* content 评论内容
* addtime 评论时间
* uid 评论作品
*/
public function padd(){
$param=input('param.');
$param['pid']=session('tid');
if(empty($param['uid'])){
return json(['code'=>2,'message'=>'uid不能为空']);
}

$data=db('comments')->insertGetId(['uid'=>$param['uid'],'content'=>$param['content'],'addtime'=>$param['addtime'],'pid'=>$param['pid']]);
if($data){
return json(['code'=>1,'message'=>'评论成功']);
}else{
return json(['code'=>2,'message'=>'评论失败']);
}
}

/**
* 评论展示
* uid comments表
* page 页数
* num 条数
*/
public function comment(){
$param=input('param.');
$param['pid']=session('tid');//用户id
if(empty($param['page'])){
$param['page']=1;
}

if(empty($param['num'])){
$param['num']=5;
}
if(empty($param['uid'])){
return json(['code'=>2,'message'=>'uid不能为空']);
}

$data=db('comments')->where('uid',$param['uid'])->page($param['page'],$param['num'])->select();

$commentslike=db('commentslike');
$people=db('people');
foreach ($data as $k=>$value) {
//查看评论点赞表的状态
$state=$commentslike->where(['pid'=>$param['pid'],'uid'=>$param['uid'],'cid'=>$value['data']])->value('state');
if(empty($state)){
$state = '还未点赞';
}
$data[$k]['state']=$state;

//获取评论人的手机号
$people=$people->where('id',$value['pid'])->value('tel');
$data[$k]['tel']=$people;

//把二级评论添加到数组数据中
if($value['rpid'] !== 0){
// $r_pid = $commentslike->where(['id'=>$value['rpid']])->value('pid');
$r_tel = $people->where('id',$value['rpid'])->value('tel');
$data[$k]['r_tel'] = $r_tel;
}else{
$data[$k]['r_tel'] = '';
}

}
return json(['code'=>1,'data'=>$data]);
}

/**
* 评论点赞
* uid 作品id
*/
public function commentslike(){
$param=input('param.');
$param['pid']=session::get('tid');

if(empty($param['uid'])){
return json(['code'=>2,'message'=>'uid不能为空']);
}
//判断该作品有没有评论
$comments=db('comments')->where('uid',$param['uid'])->select();
if(!empty($comments)){
//判断他有没有点赞
$data=db('commentslike')->where(['uid'=>$param['uid'],'pid'=>$param['pid'],'cid'=>$comments['id']])->find();
if(empty($data)){
$like=db('commentslike')->insertGetId(['uid'=>$param['uid'],'pid'=>$param['pid'],'cid'=>$comments['id'],$param['state']=>'点赞']);
if($like){
return json(['code'=>1,'message'=>'点赞成功']);
}else{
return json(['code'=>1,'message'=>'点赞失败']);
}
}else{
if($data['state']=='取消点赞'){
$like=db('commentslike')->where(['uid'=>$param['uid'],'pid'=>$param['pid'],'cid'=>$comments['id']])->update([$param['state']=>'点赞']);
}elseif($data['state']=='点赞'){
$like=db('commentslike')->where(['uid'=>$param['uid'],'pid'=>$param['pid'],'cid'=>$comments['id']])->update([$param['state']=>'取消点赞']);
}
}

}else{
return json(['code'=>2,'message'=>'此作品还未评论']);
}
}

/**
* 回复评论
* uid 作品id
* content 回复内容
* cid 这条评论的id
* uid 作品id pid 评论人id
*/
public function reply(){
$param['pid'] = session('tid');
$param = input('param.');
//被评论的id $param['cid']
$data = db('comments')->where(['id'=>$param['rid']])->find();
if($data['rid'] !== 0){
$param['rid'] = $data['rid'];//被回复人的pid.
}
$param['rid'] = $data['id'];//被回复人的pid.

$param['rpid'] = $data['pid'];

//评论内容 $param['content']
//作品id $param['uid']
$param['addtime'] = date('Y-m-d H:i:s');
$id = db('comments')->insertGetId(['uid'=>$param['uid'],'content'=>$param['content'],'addtime'=>$param['addtime'],'pid'=>$param['pid'],'rid'=>$param['rid']]);
if($id){
return json(['code'=>1,'messgae'=>'回复成功']);
}else{
return json(['code'=>2,'message'=>'回复失败']);
}
}

/**
* 查看二级评论
* uid 作品id
* rid 这条评论的id
*/
public function GetRCommtens($value='')
{
$data = db('comments')->where(['rid'=>$param['rid']])->select();
}

PHP后台评论 接口的更多相关文章

  1. 使用Asp.net WebAPI 快速构建后台数据接口

    现在的互联网应用,无论是web应用,还是移动APP,基本都需要实现非常多的数据访问接口.其实对一些轻应用来说Asp.net WebAPI是一个很快捷简单并且易于维护的后台数据接口框架.下面我们来快速构 ...

  2. QQ18年,解密8亿月活的QQ后台服务接口隔离技术

    作者:shane,腾讯后台开发高级工程师 QQ18年 1999年2月10日,腾讯QQ横空出世.光阴荏苒,那个在你屏幕右下角频频闪动的企鹅已经度过了18个年头.随着QQ一同成长的你,还记得它最初的摸样吗 ...

  3. 解决Ajax请求后台Servlet接口拿不到JSON数据问题

    前端Ajax请求代码如下: window.onload=function() { var url='http://127.0.0.1:8080/testpj/ErrorlogServlet'; $.a ...

  4. 在vue-cli搭建的项目中在后台mock接口中支持req.body和req.cookies

    在<vue-cli搭建的项目中增加后台mock接口>中实现了后台mock,但是前端post的t数据都要在mock的后台接口中使用req的接收数据事件获取http协议body中的数据. re ...

  5. WordPress 后台评论如何自定义搜索条件

    大家都知道WordPress 作为一个非常成熟的博客系统,功能可以说是非常强大,几乎整个网站都可以进行定制开发,已经不算是一个博客系统了而应该是一个成熟的开发框架 最近就用WP给客户开发了一个网站,但 ...

  6. c#后台访问接口

    直接上代码 后台代码 //接口地址string url = "http://spherefg.topsmoon.com:6666/restapi/Comment/SubmitCommentF ...

  7. 年轻人不讲武德,竟然重构出这么优雅后台 API 接口

    Hello,早上好,我是楼下小黑哥~ 最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐 ...

  8. 电商管理后台 API 接口文档

    1. 电商管理后台 API 接口文档 1.1. API V1 接口说明 接口基准地址:http://127.0.0.1:8888/api/private/v1/ 服务端已开启 CORS 跨域支持 AP ...

  9. Mock模拟后台数据接口--再也不用等后端的API啦

    ok,在开发中经常需要从后台获取数据,那么有时候后台的数据接口并没有写好,所以这时候,就需要自己模拟数据接口,来实现前端逻辑, 今天数的就是阿里巴巴的一款mock产品,很好用的哦!!!! ok!这是我 ...

随机推荐

  1. swift 属性值变化

    如果创建了一个结构体的实例并将其赋值给一个常量,则无法修改该实例的任何属性,即使有属性被声明为变量也不行. 这种行为是由于结构体(struct)属于值类型.当值类型的实例被声明为常量的时候,它的所有属 ...

  2. 编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展

    一.软件开发的现状 软件领域正在发生一个巨变,特别是近几年来,软件领域正在发生翻天覆地的变化. 这一变化主要以这个云 + 端大数据, 这些是随着目前最先进的一些技术的产生而产生的. 随着这些新的技术以 ...

  3. oralce的lag和lead函数

    https://www.cnblogs.com/always-online/p/5010185.html

  4. No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal

    No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in t ...

  5. hbase 无法打开60010网页

    在hbase-site.xml中添加如下节点 <property> <name>hbase.master.info.port</name> <value> ...

  6. 关于ueditor 在struts2 中 上传图片 ,未找到上传文件 问题的解决方法

    问题原因: ueditor 上传图片需请求imageUp.jsp文件,struts2 自带的拦截器(/*)把所有请求的文件都做了处理,所以导致无法上传图片. 解决方法: 方法一:自定义拦截器,让它在请 ...

  7. Mac osx 启用和关闭root用户

    设置->群组和用户->点击小

  8. 【转】利用virtualenv管理Python环境

    virtualenv virtualenv用于创建独立的Python环境,多个python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升 ...

  9. 透过摩拜和ofo,看产品从0到1时如何取舍需求(转)

    大纲 背景介绍 从0至1,我们成功的关键是什么? 从0到1,我们为什么选择做?又为什么选择不做? 从0到1,我们面临什么选择?我们作出了什么选择? 从0到1,我们为什么作出了这种选择? 背景 在资本注 ...

  10. 2019.01.20 bzoj2238: Mst(kruskal+树链剖分)

    传送门 树链剖分菜题. 题意简述:给一个无向图,边有边权,每次询问删一条边(对后面的询问无影响)之后的最小生成树. 思路: 先跑一次kruskalkruskalkruskal并把跑出来的最小生成树给链 ...