tp5实现每日连续签到

1 篇文章 0 订阅

思路:

  1. 获取当前时间,根据当前时间获取前一天时间
  2. 在签到表中判断前天是否打卡
  3. 在前一天表中找到信息,则为每天连续打卡;若未找到信息,则可能是断签或者是第一天打卡
  4. 使用事务更新所需要的表

使用的表:
1.签到表:用户id 签到时间 获得积分
2.用户表:连续签到天数 总积分

代码直接上

工具方法 放在工具类中
    //验证数组是否存在
    public static function havedata($array)
    {
        if (isset($array) && !empty($array)) {
            return true;
        } else {
            return false;
        }
    }

    //获取指定时间间隔的是时间戳
    public static function getLastTime($day,$type="before"){
        $data = array();
        if($type == "before"){
            $str = date("Y-m-d",strtotime("-{$day} day"))." 0:0:0";
            $data["start"] = strtotime($str);
            $str = date("Y-m-d",strtotime("-{$day} day"))." 24:00:00";
            $data["end"] = strtotime($str);
        }else{
            $str = date("Y-m-d",strtotime("+{$day} day"))." 0:0:0";
            $data["start"] = strtotime($str);
            $str = date("Y-m-d",strtotime("+{$day} day"))." 24:00:00";
            $data["end"] = strtotime($str);
        }
        return $data;
    }
 签到控制器
        $now_time = strtotime(date("Y-m-d 0:0:0",time()));//获取当前时间
        $info = $signOn->Exist($now_time,$userId);//在签到表中判断时候存在签到
        $integral = 0;
        $userInfo = $user->getInfoById("integral,continuity_day",$userId);//查询用户积分和签到天数
        if (Util::havedata($info)){//
            dumpJson(REPERROR,"您今天已经签到过了");
        }else{
            $yestaday = Util::getLastTime(1,'before');//获取前一天时间
            $existYestasySignOn = $signOn->checkSignOn($yestaday['start'],$yestaday['end'],$userId);//检查是否连续签到
            if ($existYestasySignOn){//连续签到
            	//连续签到操作  	
            	}
            }else{//断签和第一次签到
				//断签和一次签到操作
            }
 			//准备需要修改的数据
 			
            //开始事务
            Db::startTrans();
            try{
				//执行操作
                if (//判断操作是否成功){
                	//操作成功,提交sql
                    Db::commit();
                }else{
                	//操作失败,回滚数据
                    Db::rollback();
                }
            }catch (\Exception $e){
            	//操作失败,回滚数据
                Db::rollback();
            }
        }

思路仅供参考,有好的操作,请大家提出,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现视频浏览历史和播放节点功能,可以通过在用户观看视频的过程中,记录用户观看的时间节点和视频 ID,将这些信息保存在数据库中。以下是使用 ThinkPHP 5 框架实现视频浏览历史和播放节点的方法: 1. 创建数据库表 在数据库中创建一个表来保存用户的视频浏览历史记录。该表可以包含以下字段: - id:主键,自增长; - user_id:用户 ID; - video_id:视频 ID; - node:观看的节点; - create_time:观看时间。 2. 创建模型 在 ThinkPHP 5 框架中,需要创建一个模型来操作数据库表。可以使用命令行工具生成模型文件,也可以手动创建。 手动创建模型文件: 在 `application` 目录下创建一个 `model` 目录,在该目录下创建一个 `VideoHistory.php` 文件,内容如下: ```php <?php namespace app\model; use think\Model; class VideoHistory extends Model { // 设置表名 protected $table = 'video_history'; } ``` 3. 创建控制器 在 ThinkPHP 5 框架中,控制器负责接收用户请求,调用模型和视图等其他组件来完成用户请求。可以使用命令行工具生成控制器文件,也可以手动创建。 手动创建控制器文件: 在 `application` 目录下创建一个 `controller` 目录,在该目录下创建一个 `VideoHistory.php` 文件,内容如下: ```php <?php namespace app\controller; use app\model\VideoHistory as VideoHistoryModel; use think\facade\Session; class VideoHistory { // 添加浏览记录 public function add($videoId, $node) { // 获取用户 ID $userId = Session::get('user_id'); // 创建浏览记录 $history = new VideoHistoryModel; $history->user_id = $userId; $history->video_id = $videoId; $history->node = $node; $history->create_time = time(); $history->save(); } // 获取播放节点 public function get($videoId) { // 获取用户 ID $userId = Session::get('user_id'); // 获取最近一次观看记录 $history = VideoHistoryModel::where('user_id', $userId) ->where('video_id', $videoId) ->order('create_time', 'desc') ->find(); // 返回观看节点 if ($history) { return $history->node; } else { return 0; } } } ``` 4. 在路由中注册控制器方法 在 `route` 目录下的 `route.php` 文件中注册控制器方法,例如: ```php // 添加浏览记录 Route::get('video_history/add/:videoId/:node', 'VideoHistory/add'); // 获取播放节点 Route::get('video_history/get/:videoId', 'VideoHistory/get'); ``` 5. 在页面中调用添加浏览记录方法和获取播放节点方法 在需要添加浏览记录和获取播放节点的页面中,可以通过 JavaScript 调用添加浏览记录方法和获取播放节点方法,例如: ```javascript // 获取当前视频 ID 和播放节点 var videoId = '123'; var node = player.currentTime(); // 调用添加浏览记录的方法 $.get('/video_history/add/' + videoId + '/' + node); // 调用获取播放节点的方法 $.get('/video_history/get/' + videoId, function(node) { player.currentTime(node); }); ``` 这样,当用户观看视频时,页面会自动调用添加浏览记录的方法,将观看记录保存在数据库中。当用户再次观看同一视频时,页面会自动调用获取播放节点的方法,将上次观看的节点设置为视频播放的起始节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值