PHP积分签到功能实现

本文介绍了如何在数据库中创建包含签到信息的表结构,并详细描述了签到功能的代码实现,包括检查今日签到状态、计算积分、事务处理以及积分记录等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们进行一个数据库的创建、需要准备的字段如下:

id(主键ID)

签到人(用户的user-id)

积分(签到所获得积分)

额外积分(签到累计天数的积分)

连签天数(用来记录签到的天数)

一周内签到次数(用来判断本周是否签到已满)

创建时间(时间戳)

随后进行签到代码的编写:

        // 判断今天是否已签到
        $model = 实例化模型;
        // 进行数据的查询根据时间用户ID来查询数据
        $today_sign_exist = $model->where('user_id', $this->auth->id)->whereTime('createtime', 'today')->find();
        //判断是否已经签到
        if ($today_sign_exist) {
            $this->error('今日已签到');
        }
        $init_sign_score = \app\common\model\Config::getdatas('init_sign_score');
        $add_sign_score = \app\common\mode\Config::getdatas('add_sign_score');
        $per_sign_day = \app\common\model\Config::getdatas('per_sign_day');
        $extra_score_rp = \app\common\model\Config::getdatas('extra_score_rp');
        $exist = $model->where('user_id', $this->auth->id)->whereTime('createtime', 'yesterday')->find();
        $sign_day = 0;
        $sign_week_day = 0;
        if ($exist) {
            $sign_week_day = $exist['sign_week_day'];
            $sign_day = $exist['sign_day'];
        }
        $saveData['score'] = $init_sign_score + ($add_sign_score * $sign_week_day);
        $saveData['user_id'] = $this->auth->id;
        $saveData['sign_day'] = $sign_day + 1;
        $saveData['sign_week_day'] = $sign_week_day + 1;
        $saveData['extra_score'] = 0;
        // 获取额外积分
        if ($saveData['sign_week_day'] % $per_sign_day == 0) {
            // 概率获取数据
            $saveData['extra_score'] = draw_prize($extra_score_rp);
        }
        // 启动事务
        Db::startTrans();
        // 添加签到数据
        $res = $model->save($saveData);
        if (!$res) {
            goto err;
        }
        // 添加积分记录
        User::score($saveData['score'], $this->auth->id, '签到获得积分');
        if ($saveData['extra_score']) {
            User::score($saveData['extra_score'], $this->auth->id, '签到获得额外积分');
        }
        Db::commit();
        $this->success('签到成功');
        err:
        Db::rollback();
        $this->error('签到失败');
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北 川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值