tp5.1简易留言板版本一(学习记录)

Qt编程—我的QQ(局域网可用) 上一篇文章提到Qt编程—去掉标题栏和设置窗口透明用法 在做这个就用到了,效果还是挺不错的 1.这里我就分享一下模拟QQ的局域网聊天程序框架——qt编程的QQ迷你版 这里用到的透明效果上篇介绍过就不用多说了,关键的几句   this->setWindowFlags(Qt::FramelessWindowHint);//去掉标题栏      // this->setGeometry(QR 阅读详情

基本功能,点赞,留言,评论。

最简单的留言板,需要的数据表   用户表,评论表,留言内容表。

用户表:

id name pwd username uerimg (ID 用户账号  密码  昵称 头像)

留言表:

id  username time body  dianzan  taoyan (ID 用户昵称  发布留言的时间 留言内容 点赞数 反对数)

评论表:

id  uid toid pinglunneirong pltime text_id (ID 被评论留言发布者的账号 对留言评论的用户账号 评论的时间 被评论文章的ID)

留言的功能非常好实现,就是数据库基本的增删改查。

主要是点赞和反对还有查看留言对于我这个前端渣渣来说,实现有点难度,为了这个抓紧学了jQuery和ajax。

还有就是对留言内容评论的表,要想好怎么构建。具体的像知乎,或者朋友圈的那种回复模式,等看大佬们怎么写的,学习学习。

第一个版本不对用户重复点赞做限制,要是做限制,我个人会在留言表中加一个toid负责记录对文章点赞的人的账号,下次这个人再对已经点赞过的文章重复点赞时,用ajax接收返回过来的警告 用alert提示用户,并且不把这次的数据传到数据库中。反对也是这样。至于怎么样点赞按钮之后,取消点赞,就把不显示alert,然后直接传到数据库减一。具体看第二版本。

还有就是显示留言的问题,其实这个你做一个分页就可以很好地解决了,tp5也提供了这个现成的东西直接拿来用,可惜我是在做完之后,才渐渐熟悉了tp5的杂项和扩展功能怎么样用。所以这些完善都在第二版本了。

还有一点就是前端的动态显示,这就要用JS了。PHP我还没学好,苦逼抓紧学了jQuery。不得不说,学了之后,好多东西都可以交给前端做,不用后端了,省事。

主要的代码(都写在一个控制器里了)

不知道为啥,插入代码之后,就不能再后面写东西了。这就比较尴尬。。。。。 看另一篇里面有jQuery

<?php
namespace app\index\controller;

use think\Controller;
use think\facade\Request;
use think\Db;
use think\facade\Session;


class Index extends Controller
{
  public function index()
  {
    if (Request::instance()->isPost()) {
      $name = Request::instance()->post('name');
      $pwd  = Request::instance()->post('pwd');

      $res = Db::table('userlog')->where('name', $name)->find();
      if ($res) {
        if ($res['pwd'] == $pwd && $res['name'] == $name) {
          //开启session
          Session::set('name', $name);
          Session::set('username', $res['username']);
          Session::set('userimg',$res['userimg']);
          return $this->success('登录成功', 'http://liuyanban.cn/public/index.php/index/index/body', -1, 50);
        } else {
          echo  '传入的用户名' . $name . '查到的用户名' . $res['name'] . '查到的密码' . $res['pwd'] . '传入的密码' . $pwd;
          return $this->error('用户或密码错误不存在', "http://liuyanban.cn/public/index.php/index", -1, 50);
        }
      } else {
        return $this->error('用户不存在', "http://liuyanban.cn/public/index.php/index");
      }
    }
    return $this->fetch();
  }

  public function register()
  {
    $rout = __DIR__;
    if (Request::instance()->isPost()) {
      $name = Request::instance()->post('name');
      $pwd  = Request::instance()->post('pwd');
      $username = Request::instance()->post('username');
      $userimg = Request::file('txfile');
      if(empty($userimg)){
        $this->error('!!!',"www.baidu.com",-1,50);
      }
      $rout = substr($rout,0,24);
      $rout = $rout."public\img\\";
      $info = $userimg->move($rout);
      echo "<br>";
      $str_info  = $info->getSaveName();
      $str_info  = $rout.$str_info;
      $data = ['name' => $name, 'pwd' => $pwd, 'username' => $username,'userimg'=>$str_info];
      $mark = Db::table('userlog')->insert($data);
      if ($mark) {
        return $this->success('注册成功,请登录', 'http://liuyanban.cn/public/index.php/index');
      }
    }
    return $this->fetch();
  }

  public function body()
  {
    $username = Session::get('username');
    $name = Session::get('name');
    $this->assign('username', $username);
    $res = Db::table('userlog')->where('name',$name)->find();
    $userimg = $res['userimg'];
    $userimg = substr($userimg,-57,);
    $str = 'http://liuyanban.cn'.$userimg;
    $this->assign('userimg',$str);
    $res = Db::table('liuyanneirong')->order('id', 'desc')->select();
    $this->assign('list', $res);
    
    //$value_1 = huifu();

    return $this->fetch();
  }

  public function edit()
  {
    $username = Session::get('username');
    if (Request::instance()->isPost()) {
      $text = Request::instance()->post('text_body');

      $data = ['username' => $username, 'body' => $text];
      $check  = Db::table('liuyanneirong')->insert($data);
      if ($check) {
        return $this->success('发布成功', 'http://liuyanban.cn/public/index.php/index/index/body');
      } else {
        return $this->error('发布失败', 'http://liuyanban.cn/public/index.php/index/index/edit');
      }
    }
    return $this->fetch();
  }

  public function dianzan()
  {
    if (Request::instance()->isPost()) {
      $id = Request::instance()->post('id');
      $res = Db::table('liuyanneirong')->where('id', $id)->find();
      $res['dianzan'] = $res['dianzan'] + 1;
      Db::table('liuyanneirong')->where('id', $id)->update(['dianzan' => $res['dianzan']]);
    }
  }

  public function taoyan()
  {
    if (Request::instance()->isPost()) {
      $id = Request::instance()->post('id');
      $res = Db::table('liuyanneirong')->where('id', $id)->find();
      $res['taoyan'] = $res['taoyan'] + 1;
      Db::table('liuyanneirong')->where('id', $id)->update(['taoyan' => $res['taoyan']]);
    }
  }

  public function pinglun()
  {
    $uid = Session::get('username'); //收集评论用户的name
    if (Request::instance()->isPost()) {
      //评论功能概述
      // 1. 建立评论表 由id 当前用户id 被评论用户id  以及评论内容  组成
      // 2. 查表 查 liuyanneirong 表,
      // 3. 往 pinglun 表里写入数据 
      $id = Request::instance()->post('id');
      $text_body = Request::instance()->post('text-body');
      $res = Db::table('liuyanneirong')->where('id', $id)->find();
      //查到被评论用户name
      $toid = $res['username'];
      $textid = $res['id'];
      $data = ['uid' => $uid, 'toid' => $toid, 'pinglunneirong' => $text_body, 'text_id' => $textid];
      //存入评论
      Db::table('pinglun')->insert($data);
    }
  }

  public function huifu()
  {
    //查看评论回复
      $text_id = Request::post('id');
      $respl = Db::table('pinglun')->where('text_id', $text_id)->select();
      //$respl = Db::table('pinglun')->where('text_id', $text_id)->find();
      if(empty($respl))
      {
         return  json($respl);
      }else{
         return  json($respl);
      }
  }
}
ThinkPHP5留言板 ThinkPHP写的留言板 功能 : 列表页, 写留言 ,处理写留言表单, 编辑留言, 删除留言, 查看留言 立即下载

相关推荐

thinkphp5 留言板代码 登录 发表留言等功能示例

thinkphp5 留言板代码 登录 发表留言等功能示例 高手请路过

php留言板显示不出,不到一百行php代码实现留言板功能

乍一看这个标题,赶脚很牛逼,有木有?!其实,我特么熬了5个小时!!!摔!!喝口茶,平静一下,我们来慢慢分析。需求分析留言板功能我们都熟悉,无非就是两大功能点:写留言回复留言拆分实施步骤围绕上面的两大功能点,我们可以更具体的想一下下一步该怎么走。写留言写留言这个功能,抽象来看,就是将填写的留言数据存到数据库中,然后再返回页面进行显示的一个过程。继续往下想,要将数据进行存储的时候,需要哪些字段,最重要...

weixin_35830006的博客 240

TP5.0框架实现无限极回复功能的方法分析

主要介绍了TP5.0框架实现无限极回复功能的方法,结合实例形式分析了thinkPHP5.0框架下无限极回复功能相关的数据库、评论功能及界面布局实现方法,需要的朋友可以参考下

留言板效果实现

初学js,实现一个简单的留言板效果

WyHHZKA的博客 2001

PHP实现的简单留言板功能示例【基于thinkPHP框架】

主要介绍了PHP实现的简单留言板功能,结合实例形式分析了基于thinkPHP框架实现的留言板相关配置、数据库操作、sql语句等实现技巧与操作注意事项,需要的朋友可以参考下

零成本实现飞牛 OS 内网穿透:CloudFlare 隧道搭建全攻略

一、引言:突破内网限制的最优解当你的内网环境中部署了飞牛 OS 系统(无论是老旧电脑还是 NAS 设备),想要实现公网访问时,传统方案往往面临两大痛点:公网 IP 申请困难且成本高DDNS 动态解析配置复杂专业内网穿透工具存在付费门槛今天为大家带来零成本解决方案:通过免费域名搭配 CloudFlare 隧道技术,无需公网 IP 即可轻松实现飞牛 OS 服务的公网访问。全程操作可视化,新手也能快速上手!二、前期准备:必备工具清单(1)域名准备。

Honmaple的博客 7490

thinkphp5留言板

一、项目目的       为了提高新手对mvc模式的认识、加深thinkphp5知识的掌握程度,本文通过留言板示例进行展示。 二、项目需求    用户注册、登录    发表留言    删除本人留言    查看留言 三、数据表设计        分析项目需求,一个用户可以有多条留言,发现需要用户表和留言表两张表即可,需求中包含了用户注册、登录,所以用户表需要有账号、密码字段。发表留言...

Forever_and_ever的博客 7487

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3244

TP5 AJAX 实现聊天

TP5 AJAX 实现聊天 因为是在jquery写的setInterval,2秒发一次请求,太浪费资源,不建议使用。仅做记录。 前端html代码我就不放了,这个自己发挥吧:)。 1.js代码如下: let interval; $(document).on('click','.chatDetail',function(){ let accid=$(this).attr...

weixin_38418601的博客 1358

海康威视GigE工业相机的python调用demo

默认路径安装完成后,在路径C:\Program Files (x86)\MVS\Development\Samples\Python\BasicDemo下的BasicDemo.py中,海康威视官方提供了基本的调用方法,本文也是基于这个修改的。BasicDemo.py提供了通过枚举选择相机的方法,在官方的另一个DEMO:ConnectSpecCamera.py中提供了另一种不通过枚举,直接访问特定IP相机的方法,也可以参考。另外,如果每台相机都定义了唯一的用户定义名,也可以通过用户定义名来区分相机。

xulibo5828的博客 2107

谈谈SAP顾问的几个发展趋势

大家新年好,今天想聊一下对SAP顾问发展趋势的一些个人见解。过去10多年得益于我国的经济发展,外资不断加大在中国的投资和中国企业的发展,SAP顾问行业得到了很大的发展和壮大。那么未来几年SAP顾问的职业发展到底怎么样呢?

syounger的专栏 2511

tp5.1简易留言板版本一(学习记录)1

比较尴尬。。。反正是自己的学习记录。。。无所谓哪里了。 怎么获取留言内容以及精确评论呢?我是用{volist}{/volist}标签做了一个循环然后 <button class="good" id="{$vo.id}" type="button" value="">点赞数目{$vo.dianzan}</button> <button cl...

笨蛋的博客 552

【智驾与大模型】端到端与多模态大模型的精彩之旅

智驾和大模型的回顾与展望。开头的笔者自述也说了些心窝子话,边缘计算的监管刻不容缓!

仿生实验室:从0到1,制作人脸表情交互机器人,记录过程,软硬件全部开源,与君共襄盛举! 1318

[thinkPHP5项目实战_30]留言板功能完善

实现的功能:打开留言本页面展示留言,并提供留言功能: 打开application/index/controller/Guest.php控制器: <?php namespace app\index\controller; class Guest extends Basic { public function index() { if(request()->i

骑着代码去流浪 3531

openEuler服务器离线安装实战:从Docker到Samba的完整避坑指南

本文提供了一份详尽的openEuler服务器离线部署实战指南,重点解决了在无网络环境下安装Docker、Samba等软件的依赖难题。文章深入对比了`dnf install`、`rpm`直接安装及禁用仓库安装三种核心方法,并分享了构建本地DNF仓库的进阶策略,旨在帮助运维人员构建高效可靠的离线部署工作流。

weixin_29210759的博客 71

构建基于知识图谱的金融风险关联网络

在金融领域,风险的识别和管理至关重要。传统的风险分析方法往往只能处理单一维度的数据,难以全面捕捉金融市场中复杂的风险关联关系。构建基于知识图谱的金融风险关联网络的目的在于整合多源异构的金融数据,通过知识图谱的方式清晰地展示金融实体之间的复杂关系,从而更准确地识别潜在的金融风险,为金融机构的风险管理决策提供有力支持。本项目的范围涵盖了从金融数据的收集、预处理,到知识图谱的构建,再到金融风险关联网络的搭建和分析。

SuperAGI2025 1420

目标检测中的AP计算

目标检测中的AP计算 最近在学习目标检测,对模型评价指标AP的计算过程有点疑问,经过查找资料、问师兄,最终算是有了一个相对明确的了解,特此记录一下,方便以后查看,不足之处还请大家批评指正! AP(average precision)是目标检测论文中广泛使用的模型评价指标,VOC的AP计算方法在2010年的时候发生过一次更改,现在常用的是2010年之后更改的AP计算方法,该计算方法相比于之前也更为合理,本文的AP计算也是2010年之后的计算方法。官方的定义如下: (图片源自博客https://blog.cs

lppfwl的博客 2万+

使用MCAL的Fee模块集成ETAS存储协议栈

由于ETAS Fee模块导致初始化时间较长,且集成占用的内存较大,所以最终考虑使用MCAL中的Fee模块来集成ETAS的Nvm模块,本文介绍具体的集成方法注意:本文所涉及的集成前提是原有的ETAS协议栈已正常使用使用IFX Fee需要手动配置Fee,可能有出错的风险,最好是利用脚本自动生成代码来实现。另外,需要注意IFX的Fee中block数据没有CRC校验,如果使用该Fee,建议Nvm中加CRC校验(ETAS Fee中block自带CRC,可以不需要Nvm Crc),防止数据被意外篡改导致的异常。

赞的博客 404

ThinkPHP5农业电商系统开发实战与优化

电商系统在现代农业中扮演着重要角色,通过技术手段解决农产品流通中的信息不对称问题。其核心原理在于构建生产者与消费者之间的直连通道,利用MVC架构实现业务逻辑分离。技术价值体现在提升交易效率、降低运营成本,特别是在高并发场景下保障系统稳定性。典型应用场景包括农产品在线销售、库存管理和溯源查询等。本文以ThinkPHP5框架为例,详细解析了农业电商系统的架构设计,包含分布式锁防超卖、多级缓存策略等关键技术实现,并分享了数据库优化和典型问题排查的实战经验。

weixin_32924297的博客 186

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

路由器性能与功能对网络体验的影响及选购参考分析

在当下网络设备众多的市场里头,路由器身为家庭及办公网络的关键核心枢纽,它的性能以及所具备的功能对于用户的网络体验有着直接影响。面对着众多不同品牌以及各种各样的型号

上海青山不语网络的博客 803

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

家庭网络设备增多背景下主流高性能路由器分析与盘点

在当下这种家庭网络设备数量急剧增多,以及高带宽应用广泛普及的情形背景之下,挑选一台性能十分强劲,功能特别全面并且稳定的路由器这事是极其重要的。本文会依据传输性能,端口配置

上海青山不语网络的博客 674

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

thinkphp+mysql_vue汽车资讯新闻网站

管理员功能有个人中心,用户管理,汽车品牌管理,价格分类管理,经销商管理,汽车信息管理,留言板管理,系统管理等。(1)要想对汽车资讯网站进行管理,首先要依靠用户名和密码在系统中登陆,无权限的用户不可以通过任何方式登录系统和对系统的任何信息和数据进行查看,这样可以保证系统的安全可靠性和准确性。|---|---library TP核心文件里面的核心文件。|---|-----|---controller 控制器。|---|-----|---model 数据模型。|---|-----|---view 页面。

QQ_188083800的博客 1004

Workerman在线客服系统源码独立部署

基于ThinkPHP+FastAdmin+Workerman开发的一款实时在线客服系统,支持多客服(不限座席)、知识库、离线留言板、离线消息、历史会话、微信小程序接入、Uni-app接入(高级授权)、用户轨迹等功能。

2401_89037213的博客 352

thinkphp+mysql+vue汽车4S店维修服务管理系统

管理员可以在后台对4S的库存信息表、入库记录表、出库记录表进行增删改查和导出,库存信息包括品牌、汽车型号、车型、汽车发动机号、市场价、供应商公司名称,并且在增加库存信息后自动生成入库记录,入库记录牌、汽车型号、车型、汽车发动机号、市场价、供应商公司名称、入库时间。汽车服务记录包含姓名、电话、email、服务类型、服务开始时间、服务结束时间、经手人、服务状态[0为正在服务中、1为服务已完成]。应用目录结构管理员对管理员进行添加,然后管理基本信息、服务管理、服务管理、员工管理、客户信息管理、出入库管理等。

豆包程序员 1052

学生寝室管理网站

(3)入住申请管理:学生通过此功能申请入住,如果寝室管理员通过申请,则系统将对应的寝室分配给该学生,如果管理员拒绝申请,则对应的寝室不会分配给该学生,寝室容量有限,学生不能对已住满的寝室提出入住申请。功能模块(请用文字描述,至少200字):本系统实现对宿舍管理员,学生和辅导员等各个角色对学生寝室的基本信息能够快速的熟悉,以及各种增删改查等基本操作。(1)登陆注册:学生通过用户名密码登录系统,并可以对自己的信息进行修改,学生在注册的时候应选择填写自己对应的标签,以供其他寝室能够通过标签搜索留言。

weixin_45769113的博客 202

网络设备市场中路由器挑选要点及华硕AI路由器RT - BE86U分析

当下的网络设备市场范畴内,路由器身为家庭以及办公网络的关键所在,它的性能跟功能会对用户的网络体验产生直接影响。面对众多不同的品牌以及型号,挑选一款恰当的路由器极为重要。

上海青山不语网络的博客 740
上一篇: 学习笔记——简陋的仿wiki
下一篇: tp5.1简易留言板版本一(学习记录)1
折木植树
博客等级 码龄10年 3粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值