小程序制作签到
签到制作 每天分为 已签到未签到两种状态 把所有的天数存入一个数组中
首先需要知道本月有多少天? 如 :2月有 28天 3月有31天 每一个月的天数都不同 当润年的时候天数也会不同
根据PHP函数date("t"); 可以获得有多少天 把天数存入data变量中在前台页面wxml用if判断
<view class='qp p5' wx:if="{{monthday==31}}">
<view>
<image src='/img/{{day[28].imgs}}'></image>
29日
</view>
<view>
<image src='/img/{{day[29].imgs}}'></image>
30日
</view>
<view>
<image src='/img/{{day[30].imgs}}'></image>
31日
</view>
</view>
<view class='qp p5' wx:if="{{monthday==30}}">
<view>
<image src='/img/{{day[28].imgs}}'></image>
29日
</view>
<view>
<image src='/img/{{day[29].imgs}}'></image>
30日
</view>
</view>
<view class='qp p5' wx:if="{{monthday==29}}">
<view>
<image src='/img/{{day[28].imgs}}'></image>
29日
</view>
</view>
<view class='qp p5' wx:if="{{monthday==28}}">
</view>
看一下表结构
表结构非常简单 uid 字段 日期字段
把userid 发送到后台根据userid 查询签到表 查到本月签到了 那些天
我用的thinkphp5框架
$userid=$_GET["userid"];
//查询本人这个月 有那些天签到了
$a=date("Y-m");//获取本月份
$b=strtotime("+1 months");//获取下一个月份
$b=date("Y-m",$b);//用来查询 本月的所有天数 大于本月 小于下一个月
$data=db("qiandao")->where("uid",$userid)->where("riqi",">=",$a)->where("riqi","<=",$b)->select();
$arr=[];
foreach ($data as $key => $value) {
$arr[]=substr($value["riqi"], 8,2);
}
return json_encode($arr);
返回的数据格式 已签到的天数 29号 1号 7号 24号 16号
所有的天数存在一个数组 中所有天数的数据格式 每一天数都有一个imgs图片路径 通过更改这个路径来切换 已签/未签状态
根据拿到的天数 修改对应数组的imgs的图片路径
that=this;
wx.request({
url: server+'wechar/qiandao/qiandaosel',
data:{userid:userid},//发送userid 根据userid确定用户
success:function(res){
var arr=res.data;
for(var i=0;i<arr.length;i++){
//通过修改对应的下标imgs路径实现
//因为数组的下标从0开始所以要-1
that.data.day[arr[i]-1].imgs="qian_n.png";
}
//把修改完的数据放入data里
that.setData({
day:that.data.day,
});
}
})
点击签到事件
$data["uid"]=$_GET["userid"];
$data["riqi"]=date("Y-m-d");
$nowtime=date("Y-m-d");
//判断用户今天是否已经签到过了
if(db("qiandao")->where("uid",$data["uid"])->where('riqi',$nowtime)->find()){
}else{
db("qiandao")->insert($data);
}
//返回今天签到的日期
return date("d");