php+mysql+ajax实现每日签到功能
网站上支持每日签到以及签到送礼等互动功能,不仅有利于提高网站用户的活跃度,也有利于促进用户的粘合度和互动性。下面分析下使用php配合mysql、ajax来制作了一个简单的每日签到功能。
一、web前端及ajax部分文件index.html
<html> <head> <meta http-equiv=content-type content="text/html;charset=utf-8">
<title>php+ajax+mysql实现每日签到</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
//page load get num
$(window).ready(function(){
dogetdays();
});
//get sign days
function dogetdays(){
$.get("/sign.php?do=getday",{},function(data){
$("#days").html(data);
});
}
//do sign
function dosign(){
$.get("/sign.php?do=sign",{},function(data){ if(data==1){
alert("sign success!");
window.location.href='/';
}else if(data==2){
alert("already sign today! next tomorrow!");
}
});
}
</script>
</head> <body>
<a style="cursor:pointer;" onclick="dosign();">签到<span>连续签到<span id="days"></span>天</span></a>
</body> </html>
二、php后端处理部分
sign.php文件
<?php
if ($_get['do']=='getday'){
$db=new mysqli('localhost','root','123456','sign');
$uid=2; $getday="select `signdays` from `user` where `id`= {$uid}"; $day=$db -> query($getday); $days =$day -> fetch_array(mysqli_assoc); echo $days['signdays'];
}
if ($_get['do']=='sign'){
$db=new mysqli('localhost','root','123456','sign');
$uid=2;
$time=time();
//check sign today
$todaybegin=strtotime(date('y-m-d')." 00:00:00");
$todayend= strtotime(date('y-m-d')." 23:59:59");
$checksignsql="select * from `sign` where `uid` = {$uid} and `dateline` < {$todayend} and `dateline` > {$todaybegin} ";
$checksigntoday= $db -> query($checksignsql);
$checksign = $checksigntoday -> fetch_array(mysqli_assoc);
if (empty($checksign)){
$sql="select * from `sign` where `uid` = {$uid} ";
$return = $db -> query($sql) -> fetch_array(mysql_assoc);
//check sign table exist uid record
if (empty($return)){//no
$insertsql="insert into `sign` (`uid`,`dateline`) values ('{$uid}','{$time}') ";
$insert = $db -> query($insertsql);
$updatesignsql="update `user` set `signdays` =1 where `id` = {$uid} ";
$db -> query($updatesignsql); echo 1;
}else{ // check is continuous ? reset with login set signdays as 0 !!!!!
$yesterdaybegin= strtotime(date("y-m-d",strtotime("-1 day"))." 00:00:00");
$yesterdayend= strtotime(date("y-m-d",strtotime("-1 day"))." 23:59:59");
$checkcontinusql="select * from `sign` where `uid` = {$uid} and `dateline` < {$yesterdayend} and `dateline` > {$yesterdaybegin}"; $checkcontinuyesterday = $db ->query($checkcontinusql) -> fetch_array(mysql_assoc);
if (!empty($checkcontinuyesterday)){
$replacesql="replace into `sign` (`uid`,`dateline`) values ('{$uid}','{$time}') ";
$replace=$db -> query($replacesql);
$updatesignsql="update `user` set `signdays` = `signdays` + 1 where `id` = {$uid} ";
$db -> query($updatesignsql); echo 1;
}else{
}
}
}else{
echo 2;// allready sign.
}
}
?>
三、mysql数据库部分
create table if not exists `sign` (
`uid` int(11) not null,
`dateline` varchar(10) collate utf8_bin not null, primary key (`uid`)
) engine=myisam default charset=utf8 collate=utf8_bin;
insert into `sign` (`uid`, `dateline`) values (1, '1389072071'), (2, '1389072735');
create table if not exists `user` (
`id` int(11) not null auto_increment comment 'userid',
`username` varchar(35) collate utf8_bin not null comment 'username',
`signdays` int(11) not null comment '签到天数', primary key (`id`)
) engine=myisam default charset=utf8 collate=utf8_bin auto_increment=3 ;
insert into `user` (`id`, `username`, `signdays`) values (1, 'ggbound', 4), (2, 'other', 1);