PHP實現簽到功能


1、表設計
    1)、主表
        CREATE TABLE `sign` (
          `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增',
          `uid` varchar(50) NOT NULL DEFAULT '0' COMMENT '用戶ID 唯一',
          `sign_count` int(11) NOT NULL DEFAULT '0' COMMENT '連續簽到次數',
          `last_time` int(11) NOT NULL DEFAULT '0' COMMENT '最近一次簽到時間',
          `create_time` int(11) NOT NULL DEFAULT '0' COMMENT '創建時間',
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='簽到主表';
    2)、詳情表
        CREATE TABLE `sign_detail` (
          `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增',
          `uid` varchar(50) NOT NULL DEFAULT '0' COMMENT '用戶ID 唯一',

`sign_time` int(11) NOT NULL DEFAULT '0' COMMENT '簽到時間', PRIMARY KEY (`id`)
) 
ENGINE
=InnoDB DEFAULT CHARSET=utf8 COMMENT='簽到詳情表';
//主表
                   $signinfo = Db::table('ims_ewei_shop_sign_user')->where('openid',$openid)->order('id','desc')->find();
if($signinfo)
{
//連續簽到的次數

$sign_count = $signinfo['sign_count'];

//最后簽到時間
$last_time = date('Y-m-d',$signinfo['last_time']);

$yesterday = date('Y-m-d',strtotime('-1 day')); //昨天的日期格式 2019-12-12
//總的簽到天數
$sum = $signinfo ['sum'];


if($last_time == date('Y-m-d'))
{ //最后時間等於當前的時間,表示今天已經簽過
return json(['code'=>200,'msg'=>'已經簽過到了!']);
}else if( $last_time == $yesterday) //用戶昨天簽到,連續簽到次數加1,否者重置為0
{ //最后簽到到的時間等於昨天的時間 ,表示是連續簽到 連續簽到的次數 $sign_count 加1, 最后簽到的時間不等於昨天的時間 表示不是連續簽到,連續簽到的字段 sign_count 重置為0

$sign_count +=1;



}else{

$sign_count = 0;
}

$data = [


'sign_count' => $sign_count,
'sum' => $sum +=1,
'last_time' => time(),
'signdate' => time(),

];

$sign_id = Db::table('ims_ewei_shop_sign_user')->where('openid',$openid)->update($data);

if($sign_id)
{
//向詳情表入數據
$param =[
'uniacid' =>4,
'time' => time(),
'openid' => $openid,
'credit' => $signtime,
'log' => '日常簽到+'.$signtime,
'type' => 0,
'day' =>0,
];

$detail = Db::table('ims_ewei_shop_sign_records')->insertGetId($param);

if($detail){
//更新用戶總的時間表
$membertime = Db::table('ims_mc_members_times')->where('uid',$uid)->find();
if($membertime)
{
$datamember = [

'time' => $membertime ['time'] + $signtime,
'update_time' => time(),
];

$att = Db::table('ims_mc_members_times') ->where('uid',$uid)->update($datamember);

if($att >0)
{
$row = Db ::table('ims_ewei_shop_sign_records')->where('openid',$openid)->order('id','desc')->field('time,credit,log,openid')->find();

$signdate = date('Y-m-d',$row['time']);
$row['date'] = $signdate;

$datas ['code'] = 200;

$datas ['data'] = $row;



return json($datas);
}
}
}
}

}else{

$data = [

'uniacid' => 4,
'openid' => $openid,
'sign_count' => 1,
'sum' => 1,
'last_time' => time(),
'signdate' => time(),

];

$sign_id = Db::table('ims_ewei_shop_sign_user')->insertGetId($data);

$result = $sign_id;

if($result)
{
//向詳情表入數據
$param =[
'uniacid' =>4,
'time' => time(),
'openid' => $openid,
'credit' => $signtime,
'log' => '日常簽到+'.$signtime,
'type' => 0,
'day' =>0,
];

$signDetail = Db::table('ims_ewei_shop_sign_records')->insertGetId($param);

if($signDetail){
//更新用戶總的時間表
$membertime = Db::table('ims_mc_members_times')->where('uid',$uid)->find();
if($membertime)
{
$datamember = [

'time' => $membertime ['time'] + $signtime,
'update_time' => time(),
];

$att = Db::table('ims_mc_members_times') ->where('uid',$uid)->update($datamember);

if($att >0)
{
$res = Db ::table('ims_ewei_shop_sign_records')->where('openid',$openid)->order('id','desc')->field('time,credit,log,openid')->find();

$signdate = date('Y-m-d',$res['time']);
$res['date'] = $signdate;

$data ['code'] = 200;

$data ['data'] = $res;



return json($data);
}
}
}

}else{

return json(['code' => 100,'msg'=>'簽到失敗']);
}
}

    





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM