0

0

php分时间段的抽奖程序代码

php中文网

php中文网

发布时间:2016-07-25 08:58:42

|

1468人浏览过

|

来源于php中文网

原创

  1. require_once (APP_ROOT . "./class/class_lib.php");
  2. require_once libfile ( 'class/StoreProcs' );
  3. pc_base::load_app_class('table_sub','',0);
  4. /**
  5. * 大转盘
  6. * @author Administrator
  7. *
  8. */
  9. class lib_dzp_lottery extends app_lib {
  10. /**
  11. * 奖品表
  12. */
  13. public $lottery = 'activity_lyq_lottery';
  14. /**
  15. * 奖品日志表
  16. */
  17. public $lottery_log = 'activity_lyq_lottery_log';
  18. /**
  19. * n等奖品
  20. */
  21. private $level = array();
  22. /**
  23. * 奖品信息
  24. */
  25. private $lotteryArray = array();
  26. /***
  27. * 随机数结束位数
  28. */
  29. private $max = 30000;
  30. /**
  31. * 类别 true:默认false:掌苏
  32. */
  33. private $type=true;
  34. /**
  35. * 中奖专业户
  36. */
  37. private $tel_zy=false;
  38. /**
  39. * 读取配置
  40. */
  41. public function load_setting() {
  42. $data=getcache('lyqdzp_setting');
  43. define('TIME', time()); //当前时间
  44. define('L_START', strtotime($data['l_start'])); //报名开始时间
  45. define('L_END', strtotime($data['l_end'])); //报名结束时间,-1意思昨天 23:59:59
  46. define('L_DAY_START',$data['l_day_start']); //每天开始时间
  47. define('L_DAY_END', $data['l_day_end']);//每天结束时间
  48. define('L_DAY_CISHU', $data['l_day_cishu']);//每天获得奖品次数
  49. define('L_CISHU', $data['l_cishu']);//共计获得奖品次数
  50. define('L_MIN', 20);//最少来福币
  51. define('L_LFB', $data['l_lfb']);//减少来福币
  52. define('L_ZY', $data['l_zy']); //专业户
  53. define('L_QUANSHU', $data['l_quanshu']);//圈数,大转盘开始圈数
  54. define('L_KONGJIANG', intval($data['l_kongjiang']));//空奖概率
  55. $host='www.****.com'; //现网
  56. if($_SERVER['HTTP_HOST']=='221.****0'){
  57. $host='221.*****'; //测试机
  58. }elseif($_SERVER['HTTP_HOST']=='125.com'){
  59. $host='125life.com';//本地
  60. }elseif(strpos($_SERVER['HTTP_HOST'],'192.168.')==0){
  61. $host=$_SERVER['HTTP_HOST'].'/125e.com';//本地
  62. }
  63. define('L_SITE', 'http://'.$host.'/'); //域名最后加/
  64. define('L_URL', L_SITE.'index.php');//访问地址
  65. //只能通过flash地址访问
  66. $s=L_SITE.'flash/dzp/i.swf';
  67. if(preg_replace('/swf.*$/','swf',$_SERVER['HTTP_REFERER'])!=$s&&$this->type){
  68. exit('老兄你已经得到得够多了,请通过正规途径摇奖!');
  69. }
  70. $this->load();
  71. }
  72. /**
  73. * 黑名单
  74. */
  75. private $heimingdan = array();
  76. /**
  77. * 读取奖品配置
  78. */
  79. public function load() {
  80. $this->setlottery ();
  81. $this->heimingdan = getcache ( 'tel', 'blanklist' );
  82. }
  83. private function setlottery() {
  84. $time=strtotime(date('Y-m-d',TIME));
  85. $sql = "select u.*";
  86. $sql .= ", (select COUNT(l.lotteryid) from " . DB::table ( $this->lottery_log ) . " AS l where u.lotteryid=l.lotteryid and l.iswinning='1')as num ";
  87. $sql .= " from " . DB::table ( $this->lottery ) . " AS u ";
  88. $sql .= " where 1 ";
  89. $sql .= " and u.isdisable='0' ";
  90. $sql .= " and u.time_start
  91. $sql .= " and u.time_end>='$time' ";
  92. $sql .= " ORDER BY u.listorder ";
  93. $d = DB::fetch_all ( $sql );
  94. $sum = 0;
  95. foreach ( $d as $r ) {
  96. $r ['sum_over'] = intval ( $r ['sum'] ) - intval ( $r ['num'] );
  97. if ($r ['sum'] > 0) {
  98. $sum += $r ['sum'];
  99. }
  100. $r['msg']=str_replace('{name}', $r['name'],$r['msg']);
  101. $this->lotteryArray [$r ['lotteryid']] = $r;
  102. }
  103. if($sum
  104. $m = 1;
  105. $probability = 0;
  106. $newsum=0;
  107. //80%空奖+20%奖
  108. $this->max = $sum + $sum * (L_KONGJIANG/100) / ((100-L_KONGJIANG)/100);
  109. foreach ( $this->lotteryArray as $r ) {
  110. if ($r ['sum'] > 0) {
  111. $newsum=$r ['sum'];
  112. if($r['probability']>0){
  113. $probability=0;
  114. $probability=ceil($r ['sum']*100/$r['probability']);
  115. if($probability>0){
  116. $newsum=$probability;
  117. }
  118. }
  119. $this->level [$r ['lotteryid']] ['start'] = $m;
  120. $this->level [$r ['lotteryid']] ['end'] = $m + $newsum;
  121. $m = $m + $r ['sum'];
  122. }
  123. }
  124. }
  125. /**
  126. * 检测用户是否中奖 0 谢谢参与,其他 返回奖品data数据
  127. * @param array $user array(uid,tel,ip)
  128. */
  129. public function check($user) {
  130. if (intval ( $user ['uid'] )
  131. //没有登录
  132. return 0;
  133. }
  134. if(intval(TIME)
  135. //您来早了,活动还没有开始!
  136. return -21;
  137. }
  138. if(intval(TIME)>intval(L_END)){
  139. //已经过了活动时间,非常遗憾,谢谢!
  140. return -22;
  141. }
  142. if ($this->get_user_lfb ( $user ['uid'] )
  143. //$this->credit ( $user ['uid'], -11, $logid );
  144. return -11; //您的来福币余额不足
  145. }
  146. $data = array(
  147. 'uid' => $user ['uid'],
  148. 'tel' => $user ['tel'],
  149. 'ip' => $user ['ip'],
  150. 'addtime' => time ()
  151. );
  152. $logid = DB::insert ( $this->lottery_log, $data, true );
  153. //检查用户 每天 已中奖品数
  154. if ($this->get_lottery ( $user ['uid'], strtotime ( date ( 'Y-m-d', TIME ) ), strtotime ( "+1day", strtotime ( date ( 'Y-m-d', TIME ) ) ), true ) >= L_DAY_CISHU) {
  155. $this->credit ( $user ['uid'], -12, $logid );
  156. //很遗憾,你本次什么也没有抽到!
  157. return -12;
  158. }
  159. //检查用户 全部 已中奖品数
  160. if ($this->get_lottery ( $user ['uid'], 0, 0, true ) > L_CISHU&&L_CISHU>0) {
  161. $this->credit ( $user ['uid'], -12, $logid );
  162. //很遗憾,你本次什么也没有抽到!
  163. return -15;
  164. }
  165. //检测黑名单,设置概率
  166. if ($this->checkhei ( $user ['tel'] ) > 0) {
  167. $this->credit ( $user ['uid'], -13, $logid );
  168. //很遗憾,你本次什么也没有抽到!
  169. return -13;
  170. }
  171. $lotteryid = $this->choujiang();
  172. $this->credit ( $user ['uid'], $lotteryidhao);
  173. if ($lotteryid > 0) {
  174. return $this->lotteryArray [$lotteryid];
  175. } else {
  176. return -4;
  177. }
  178. //-1奖品已发完
  179. //-2本时段奖品已玩
  180. //-3不发奖品
  181. //-4奖品有问题
  182. //-11您的来福币余额不足
  183. //-12很遗憾,你本次什么也没有抽到!
  184. //-13黑名单里面,很遗憾,你本次什么也没有抽到!
  185. //-14中奖专业户禁止中高讲高奖品
  186. //-15已超过yizhong总奖品数
  187. //-16 掌苏传递手机 号错误
  188. //-21您来早了,活动还没有开始!
  189. //-22已经过了活动时间,非常遗憾,谢谢!
  190. //-23对不起,现在不是活动时间,活动时间为每天
  191. }
  192. /**
  193. * 显示
  194. * @param unknown_type $data
  195. */
  196. public function show($data){
  197. $ok=0;//3中奖
  198. $zz=0;//转盘度数
  199. $result='';//奖品名称
  200. $lotteryid=0;//奖品ID
  201. if(is_array($data)){
  202. $ok=3;
  203. $result=$data['msg'];
  204. $zz=$data['angle']+L_QUANSHU*360;
  205. $lotteryid=$data['lotteryid'];
  206. }else{
  207. $m='';
  208. switch($data){
  209. case 0:{
  210. $m= '请先登录!';
  211. }break;
  212. case -11:{
  213. $m= '您的来福币余额不足!';
  214. }break;
  215. case -12:{
  216. $m= '很遗憾,你本次什么也没有抽到!';
  217. }break;
  218. case -21:{
  219. $m= '您来早了,活动还没有开始!';
  220. }break;
  221. case -22:{
  222. $m= '已经过了活动时间,非常遗憾,谢谢!';
  223. }break;
  224. case -23:{
  225. $m= '对不起,现在不是活动时间,活动时间为每天'.L_DAY_START.':00-'.L_DAY_END.':00';
  226. }break;
  227. default:{
  228. $m= '很遗憾,你本次什么也没有抽到!';
  229. }break;
  230. }
  231. $result=$m;
  232. $ok=3;//3中奖
  233. $zz=360+L_QUANSHU*360;//再接再厉
  234. }
  235. header("Expires:Mon,26Jul199705:00:00GMT");
  236. header("Cache-Control:no-cache,must-revalidate");
  237. header("Pragma:no-cache");
  238. header("Content-type:text/html;charset=utf-8");
  239. if(!$this->type){
  240. echo json_encode(array('return'=>$lotteryid,
  241. 'msg'=>$result));
  242. }else{
  243. echo ''."\n";
  244. echo ''."\n";
  245. echo ''."\n";
  246. echo ''."\n";
  247. }
  248. exit;
  249. }
  250. /**
  251. * 抽奖的号
  252. */
  253. private $hao=0;
  254. /**
  255. * 抽奖开始
  256. */
  257. private function choujiang() {
  258. $j = 0;
  259. $lotteryid = 0;
  260. $j = mt_rand ( 1, $this->max );
  261. $this->hao=$j;
  262. foreach ( $this->level as $k => $r ) {
  263. if ($r ['start'] $j) {
  264. $lotteryid = $k;
  265. break;
  266. }
  267. }
  268. $d = array(
  269. 1 => array(
  270. 'time' => strtotime ( date ( 'Y-m-d 00:00:00', TIME ) ),
  271. 'time_end' => strtotime ( date ( 'Y-m-d 07:59:59', TIME ) )
  272. )
  273. );
  274. for ($i=2;$i
  275. $d[$i]=array(
  276. 'time' => strtotime ( date ( 'Y-m-d '.($i+6).':00:00', TIME ) ),
  277. 'time_end' => strtotime ( date ( 'Y-m-d '.($i+6).':59:59', TIME ) )
  278. );
  279. }
  280. if($lotteryid>0){
  281. $l=$this->lotteryArray [$lotteryid];
  282. $sql = "select count(*) m from " . DB::table ( $this->lottery_log );
  283. $sql .= " where lotteryid='$lotteryid' ";
  284. $s= intval ( DB::result_first ( $sql ) );
  285. $sum_over=$l['sum']-$s;
  286. if($sum_over>0){
  287. //本时段 奖品数
  288. $sum=0;
  289. foreach ($d as $k=>$r){
  290. if(TIME>=$r['time']&&TIME
  291. if($l['time_'.$k]>0){//个数限制
  292. $sum=$this->get_lottery_id(0,$r['time'],$r['time_end']+1,$lotteryid);
  293. if($sum>=$l['time_'.$k]){
  294. //本时段奖品已玩
  295. $lotteryid=-2;
  296. break;
  297. }
  298. }elseif ($l['time_'.$k]==0){
  299. //不发奖品
  300. $lotteryid=-3;
  301. break;
  302. }else{
  303. //-1 不限制
  304. }
  305. }
  306. }
  307. if($this->tel_zy && $lotteryid>0&&$lotteryid
  308. $lotteryid=-14;
  309. }
  310. }else{
  311. //奖品已发完
  312. $lotteryid=-1;
  313. }
  314. }else{
  315. //奖品有问题
  316. $lotteryid=-4;
  317. }
  318. return $lotteryid;
  319. }
  320. /**
  321. * 检测黑名单和普通用户,概率
  322. * @param string $tel
  323. * @return 大于1 表示本次禁止抽
  324. */
  325. private function checkhei($tel) {
  326. $n = mt_rand ( 1, 100 );
  327. if (in_array ( $tel, $this->heimingdan ['tel'] ) && L_ZY > 0) {
  328. $this->tel_zy=true;
  329. if ($n > L_ZY) {
  330. return 1;
  331. }
  332. }else{
  333. //号码检测
  334. if (!self::check_tel($tel)) {
  335. return 1;
  336. }
  337. }
  338. return 0;
  339. }
  340. /**
  341. * 合计奖品数
  342. * @param intval $uid
  343. * @param intval $start
  344. * @param intval $end
  345. * @param bool $bool true 获得奖品数 false 不统计
  346. * @return number
  347. */
  348. private function get_lottery($uid = 0, $start = 0, $end = 0, $bool = false) {
  349. $sql = "select count(*) m from " . DB::table ( $this->lottery_log );
  350. $sql .= " where 1 ";
  351. if (intval ( $start ) > 0) {
  352. $sql .= " and addtime>='$start' ";
  353. }
  354. if (intval ( $end ) > 0) {
  355. $sql .= " and addtime
  356. }
  357. if ($bool) {
  358. $sql .= " and lotteryid>0 ";
  359. }
  360. if (intval ( $uid ) > 0) {
  361. $sql .= " and uid='$uid' ";
  362. }
  363. return intval ( DB::result_first ( $sql ) );
  364. }
  365. /**
  366. * 合计奖品数
  367. * @param intval $uid
  368. * @param intval $start
  369. * @param intval $end
  370. * @param intval $bool 奖品id
  371. * @return number
  372. */
  373. private function get_lottery_id($uid = 0, $start = 0, $end = 0, $lotteryid = 0) {
  374. $sql = "select count(*) m from " . DB::table ( $this->lottery_log );
  375. $sql .= " where 1 ";
  376. if (intval ( $start ) > 0) {
  377. $sql .= " and addtime>='$start' ";
  378. }
  379. if (intval ( $end ) > 0) {
  380. $sql .= " and addtime
  381. }
  382. if ($lotteryid>=0) {
  383. $sql .= " and lotteryid='$lotteryid' ";
  384. }
  385. if (intval ( $uid ) > 0) {
  386. $sql .= " and uid='$uid' ";
  387. }
  388. return intval ( DB::result_first ( $sql ) );
  389. }
  390. /**
  391. * 获取用户来福币
  392. * @param intval $uid
  393. * @return number
  394. */
  395. public function get_user_lfb($uid) {
  396. $sql = "select extcredits2 from sz_common_member_count ";
  397. $sql .= " where 1 ";
  398. $sql .= " and uid='$uid' ";
  399. return intval ( DB::result_first ( $sql ) );
  400. }
  401. /**
  402. * 记录日志和更新用户来福币
  403. * @param intval $uid
  404. * @param intval $r 返回值
  405. * @param intval $logid
  406. * @param intval $lotteryid
  407. */
  408. private function credit($uid, $result, $logid = 0, $lotteryid = 0,$hao=0) {
  409. $data = array();
  410. if ($lotteryid > 0) {
  411. $data ['lotteryid'] = $lotteryid;
  412. $data ['iswinning'] = 1;
  413. }
  414. $data ['result'] = $result;
  415. $data ['hao'] = $hao;
  416. $data ['HTTP_REFERER'] = $_SERVER['HTTP_REFERER'];
  417. DB::Update ( $this->lottery_log, $data, " logid='$logid' " );
  418. if (L_LFB > 0) {
  419. $sql = 'UPDATE sz_common_member_count SET extcredits2=extcredits2-' . L_LFB . ' WHERE uid=' . $uid;
  420. DB::query ( $sql );
  421. $this->credit_log ( $uid, 'reduce', L_LFB, 1, '积分清零活动' );
  422. }
  423. }
  424. /**
  425. *手机号检查
  426. */
  427. private function check_tel($tel){
  428. $different_network=table_sub::get_different_network();
  429. if (!preg_match("/$different_network/",$tel)) {
  430. return false;
  431. }
  432. return true;
  433. }
  434. /**
  435. * 存储过程链接
  436. */
  437. private $StoreProcs;
  438. /**
  439. * 来福币日志 存储过程
  440. * @param intval $uid
  441. * @param string $op add增加 reduce 消耗
  442. * @param intval $creditvalue 来福币
  443. * @param intval $credittype 1来福币 2来福点
  444. * @param string $oreason 说明
  445. */
  446. private function credit_log($uid, $op, $creditvalue, $credittype, $oreason) {
  447. if (! $this->StoreProcs) {
  448. $this->StoreProcs = new StoreProcs ();
  449. }
  450. //调用存储过程
  451. $this->StoreProcs->query ( "call app_credit_log($uid,'$op','$credittype',1,$creditvalue,'$oreason')" );
  452. }
  453. }
复制代码

三,调用:

  1. $dzp=new lib_dzp_lottery();
  2. $u=array('uid'=>$_G ['uid'],'tel'=>$_G ['tel'],'ip'=> $_G ['clientip']);
  3. $dzp->load_setting();
  4. $dzp->show($dzp->check($u));
  5. ?>
复制代码


相关文章

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

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

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP进阶篇-函数(玉女心经版)
PHP进阶篇-函数(玉女心经版)

共12课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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