PHP原生使用原生sql语句实现七天连续签到
准备:一张放用户签到的数据表,字段包括id,userid(用户id),signtime(签到时间,时间戳),days(连续签到时间)
/**
* 七天连续签到
*/
public function sign(){
$userid = $_POST['userid'];//要签到的用户id
$servername = '服务器ip';
$username = "用户名";
$password = "密码";
$dbname = "数据库密码";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
$select = "SELECT userid,signtime,days FROM wechat_sign WHERE userid=$userid"; //查找表中是否存在用户
$result = mysqli_query($conn, $select);
$time = time(); //现在的时间戳
if (mysqli_num_rows($result) > 0) { //判断用户是否在表中存在
while($row = mysqli_fetch_assoc($result)) {
//存在查看签到时间是否大于今天凌晨时间戳
$timetoday = strtotime(date("Y-m-d",time())); //今天凌晨时间戳
$yesterday = strtotime(date("Y-m-d",time()-86400)); //昨天凌晨时间戳
if($row['signtime'] >$timetoday ){ // 签到的时间>今天凌晨的时间 当天已经签到了
echo '今天已经签到';
} else{ //今日签到,更新表中数据
if($row['days'] == 7){ //判断是否第七天
$days = 1;
} else{
//今天凌晨的时间戳 > 上次签到时间 > 昨天凌晨时间戳 断签!
if($timetoday > $row['signtime'] || $row['signtime'] > $yesterday){
$days = $row['days']+1;
} else{
$days = 1;
}
}
$update = "UPDATE wechat_sign SET signtime=$time,days=$days WHERE userid=$userid";
$updatetime = mysqli_query($conn,$update);
if($updatetime && $days == 7){
echo '完成七天签到';
} elseif($updatetime){
echo '今日签到完成';
} else{
echo '签到失败';
}
}
}
} else { //不存在先进行添加
$insert = "INSERT INTO wechat_sign (userid,signtime,days) values ('$userid','$time','1')";
$insertdata = mysqli_query($conn,$insert);
if($insertdata){
echo '插入表中并第一次签到成功';
} else{
echo '插入表中并第一次签到失败';
}
}
}
小白一枚,欢迎各位大神指导