php实现签到功能(案例)

墨辰丷
发布: 2018-05-17 09:50:01
原创
2971人浏览过

这篇文章主要介绍了php实现签到功能的方法,结合实例形式分析了php基于数据库及时间判断操作实现签到功能的相关技巧,需要的朋友可以参考下

本文实例讲述了php实现签到功能的方法。分享给大家供大家参考,具体如下:

首先我在数据库里建了两张表,一个是用户的积分表,一个是签到状态表,分来用来记录用户的积分数和先到状态

立即学习PHP免费学习笔记(深入)”;

在用户签到状态表中我们有一个字段,last_sign_time,即上一次签到时间,每次可以签到的时候把这个时间与当前时间进行比较 如果相差为0天,则说明今天已签到(这个签到是24小时内只能签到一次,即两次签到时间要相差24小时以上).如果等于一天则今日可以签到,如果2天及其以上则说明漏签了.

通过时间戳的判断,及时更新状态表,并且当可以签到的时候则对用户积分表进行操作,即更新用户积分.

具体代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

<?php

$user_id=@$_REQUEST['user_id'];

//功能:计算两个时间戳之间相差的日时分秒

//$begin_time 开始时间戳

//$end_time 结束时间戳

function timediff($begin_time,$end_time)

{

   if($begin_time < $end_time){

     $starttime = $begin_time;

     $endtime = $end_time;

   }else{

     $starttime = $end_time;

     $endtime = $begin_time;

   }

   //计算天数

   $timediff = $endtime-$starttime;

   $days = intval($timediff/86400);

   //计算小时数

   $remain = $timediff%86400;

   $hours = intval($remain/3600);

   //计算分钟数

   $remain = $remain%3600;

   $mins = intval($remain/60);

   //计算秒数

   $secs = $remain%60;

   $res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);

   return $res;

}

function upuserscore($current_total_day){

$user_id=@$_REQUEST['user_id'];

//读取数据库配置信息的ini文件

  $ary=parse_ini_file('db.ini');

  $db_login_name=base64_decode($ary['db_login_name']);

  $db_login_password=base64_decode($ary['db_login_password']);

  $db_host=base64_decode($ary['db_host']);

  $db_name=base64_decode($ary['db_name']);

//链接数据库

 $scorelink=mysqli_connect($db_host,$db_login_name,$db_login_password);

mysqli_select_db($scorelink,$db_name); //选择数据库

//检查积分表里是否有该用户 有的话则更新数据 没有的话则插入数据

$scoreq = "SELECT * FROM user_score WHERE user_id=$user_id"; //SQL插入语句

    mysqli_query($scorelink,"SET NAMES utf8");

    $rs = mysqli_query($scorelink,$scoreq); //获取数据集

    if(!$rs){

        exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($scorelink))));

    }

    if(mysqli_num_rows($rs)){//该用户有数据 则更新其积分信息

      $total_score="";

       while($row = mysqli_fetch_row($rs)) {

      $total_score=$row[4];

      }

      $scoreusdateq = "UPDATE user_score SET user_total_score ='98' WHERE user_id=$user_id;"; //更新

      mysqli_query($scorelink,"SET NAMES utf8");

      $ustaters = mysqli_query($scorelink,$scoreusdateq); //获取数据集

      if($ustaters ==1){

          exit(json_encode(array('status'=>"success",'code'=>"100")));

        mysqli_close($scorelink);//关闭连接 

        exit();

      }else{

          exit(json_encode(array('status'=>"success",'code'=>"1")));

           mysqli_close($scorelink);//关闭连接

           exit();

      }

    }else{//没有该用户数据 则插入其积分信息

      $scoreinsertq = "insert into user_score (user_id,user_total_score)values($user_id,10)"; //SQL插入语句

      mysqli_query($scorelink,"SET NAMES utf8");

      $rs = mysqli_query($scorelink,$scoreinsertq); //获取数据集

      if(!$rs){

          exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($scorelink))));

      }

      if(strpos($q,"SELECT") === false){

          exit(json_encode(array('status'=>"success",'code'=>"100")));

      }

      mysqli_close($scorelink);//关闭连接

    }

}

//读取数据库配置信息的ini文件

  $ary=parse_ini_file('db.ini');

  $db_login_name=base64_decode($ary['db_login_name']);

  $db_login_password=base64_decode($ary['db_login_password']);

  $db_host=base64_decode($ary['db_host']);

  $db_name=base64_decode($ary['db_name']);

//链接数据库

 $link=mysqli_connect($db_host,$db_login_name,$db_login_password);

mysqli_select_db($link,$db_name); //选择数据库

//检查签到表里是否有该用户 有的话则更新数据 没有的话则插入数据

$q = "SELECT * FROM user_signin WHERE user_id=$user_id"; //SQL插入语句

    mysqli_query($link,"SET NAMES utf8");

    $rs = mysqli_query($link,$q); //获取数据集

    if(!$rs){

        exit(json_encode(array('status'=>"success",'code'=>"1",'error'=>mysqli_error($link))));

    }

    if(mysqli_num_rows($rs)){//该用户有数据 则更新其签到信息

      $last_time="";

      $total_day="";

       while($row = mysqli_fetch_row($rs)) {

      $last_time=$row[4]."<br/>";

      $total_day=$row[5];

    }

      //根据上次签到时间和这次签到时间作比较判断有没有漏签和今日是否已签到

      $current_total_day=intval($total_day)+1;

      $current_day=time();

      $ary = timediff($last_time,$current_day);

    if($ary[day]==0){//今天已签到

       exit(json_encode(array('status'=>"success",'code'=>"5")));

        mysqli_close($link);//关闭连接 

        exit();

    }else if($ary[day]==1){//没有漏签

      $usdateq = "UPDATE user_signin SET last_sign_time='$current_day', total_day='$current_total_day' WHERE user_id=$user_id;"; //更新

      mysqli_query($link,"SET NAMES utf8");

      $ustaters = mysqli_query($link,$usdateq); //获取数据集

      if($ustaters ==1){

      upuserscore($current_total_day);

          //exit(json_encode(array('status'=>"success",'code'=>"100")));

        mysqli_close($link);//关闭连接 

        exit();

      }else{

          exit(json_encode(array('status'=>"success",'code'=>"1")));

           mysqli_close($link);//关闭连接

         exit();

      }

    }else{//漏签过

    $usdateq = "UPDATE user_signin SET last_sign_time='$current_day', total_day=1 WHERE user_id=$user_id;"; //更新

    mysqli_query($link,"SET NAMES utf8");

    $ustaters = mysqli_query($link,$usdateq); //获取数据集

    if($ustaters ==1){

      upuserscore($current_total_day);

        //exit(json_encode(array('status'=>"success",'code'=>"100")));

      mysqli_close($link);//关闭连接 

      exit();

    }else{

        exit(json_encode(array('status'=>"success",'code'=>"1")));

       mysqli_close($link);//关闭连接

       exit();

    }

  }

  }else{//没有该用户记录则插入

    $current_day=time();

    $insertq = "insert into user_signin (user_id,last_sign_time,total_day)values($user_id,'$current_day',1)"; //SQL插入语句

    mysqli_query($link,"SET NAMES utf8");

    $insertrs = mysqli_query($link,$insertq); //获取数据集

    if(strpos($insertrs,"SELECT") === false){//出入数据成功

      upuserscore('1');

      //exit(json_encode(array('status'=>"success",'code'=>"100")));

      }

  }

  mysqli_close($link);//关闭连接

?>

登录后复制

相关推荐:

PHP如何实现签到功能

thinkPHP实现签到功能方法的示例代码分享

php实现签到功能的图文代码详解

以上就是php实现签到功能(案例)的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号