用户登录之后才可以给文章点赞 ,一篇文章只能点一次 ,点一个,赞数加一
(只能点赞不能取消赞)
功能实现(tp做的)
建表: 用户表(user) 文章表 (text) 用户文章关系表(u_t) 点赞表dz()
u_id name t_id title content uid tid pinglun uid tid
用户id 用户名 文章id 文章标题 文章内容 用户id 文章id 评论内容 用户id 文章id
思路
1:登录用户,设置Session传送用户id (登录页面)
2:查询文章表,展示中爱还要展示评论的个数。根据文章id,查询关系表(u_t)关系表中 指定文章的评论个数(根据文章id 在关系表中找评论的条数)(展示文章)
3:根据Session获取用户id,根据文章表获取文章id,根据用户id和文章id查找用户文章关系表(u_t)中的评论(显示评论页面)
4:有用户id、文章id可添加评论
5.有用户id、文章id添加入库(点赞的表),判断用户是否存在,存在false,不存在添加 计数指定uid的tid个数(就是点赞个数)
展示文章页面的图片
展示文章评论页面的图片
实现的代码
登录展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录页面</title>
</head>
<body>
<form action="{:url('index/login')}" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>
控制器(方法)
控制器
<?php
namespace app\index\controller;
use app\index\model\User;
use think\Controller;
use think\Request;
use think\Db;
use think\Session;
class Index extends Controller
{
public function login()
{
if(Request::instance()->isGet())
{
return view('login');
}
else
{
$name=input('post.username');
$user = new User();
$res=$user->sel($name);
if($res)
{
$user=Db::table('user')->where('username',$name)->find();
Session::set('id',$user['u_id']);
$this->success('登录成功','text');
}
else
{
$this->error('登录失败');
}
}
}
//展示文章类型 展示文章
public function text()
{
$res=Db::table('text')->select();
//遍历找到想要的文章id
foreach($res as $k=>$v)
{
//关系表中 指定文章的评论个数(根据文章id 在关系表中找评论的条数)
$res[$k]['count']=Db::table('t_u')->where('tid',$v['t_id'])->count();
}
return view('text',['arr'=>$res]);
}
//评论展示
public function show()
{
//文章类型的id
$id=input('get.id');
//根据文章id 找用户id和评论内容
$res=Db::table('user')->join('t_u','user.u_id=t_u.uid')->where('tid',"$id")->select();
$arr=Db::table('text')->where('t_id',"$id")->select();
foreach($arr as $k=>$v)
{
//关系表中 指定文章的评论个数(根据文章id 在关系表中找评论的条数)
$arr[$k]['num']=Db::table('dz')->where('tid',$id)->count();
}
return view('show',['arr'=>$res,'data'=>$arr]);
}
//添加评论
public function p_insert()
{
//评论人
$arr['uid']= Session::get('id');
//评论内容
$arr['content']=input('post.text');
//文章id
$arr['tid']=input('post.tid');
$res= Db::table('t_u')->insert($arr);
if($res)
{
$this->success('评论成功');
}
else
{
$this->error('评论失败');
}
}
//点赞入库
public function dz()
{
$uid=Session::get('id');
$tid=input('post.tid');
$res= Db::table('dz')->where('uid',$uid)->where('tid',$tid)->select();
if($res==true)
{
return false;
}
else
{
$res['uid']=Session::get('id');
$res['tid']=$tid;
Db::table('dz')->insert($res);
return true;
}
}
}
文章展示
文章展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文章</title>
</head>
<body>
<h3 style="color: red">文章显示</h3>
<table cellspacing="70">
{volist name="arr" id="v"}
<tr>
<td>文章名称:<a href="{:url('index/show')}?id={$v.t_id}">《{$v.t_name}》</a></td>
<td>评论条数:{$v.count}</td>
</tr>
{/volist}
</table>
</body>
</html>
文章评论点赞展示
文章评论点赞展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>评论展示</title>
</head>
<body>
{volist name="data" id="v"}
<h4 style="color: red">
《{$v.t_name}》
<input type="hidden" value="{$v.t_id}" class="tid">
</h4>
<textarea name="" cols="70" rows="15">{$v.node}</textarea>
<br>
<a href="javascript:void (0)" style="margin-left: 400px;" id="dz"><img src="__STATIC__/61.GIF" alt=""></a>
<span class="p">({$v.num})</span>
<br>
{/volist}
{volist name="arr" id="v"}
{$v.username}:
{$v.content}
<br>
{/volist}
<br>
<form action="{:url('index/p_insert')}" method="post">
<textarea name="text" id="" cols="30" rows="10" placeholder="请输入评论的内容"></textarea>
<br>
{volist name="data" id="v"}
<input type="hidden" name="tid" value="{$v.t_id}">
{/volist}
<input type="submit" value="我要评论">
</form>
<br>
<a href="{:url('index/text')}" style="margin-left: 250px;">查看文章</a>
</body>
</html>
<script src="__STATIC__/jquery.js"></script>
<script>
$(document).on('click','#dz',function(){
var tid=$(".tid").val();
$.ajax({
type: "POST",
url: "{:url('index/dz')}",
data: {
tid:tid
},
success: function(msg){
if(msg==false)
{
alert('您已经点过赞了');
return false;
}
else
{
history.go(0);
}
}
});
});
</script>