项目3:PHP抽奖程序 ,抽奖规则代码 分时间段
抽奖概率为:奖品总数为概率 =================================== 项目3 抽奖程序 分时间段 =================================== 数据库: activity_lyq_lottery奖品表lotteryidname礼品名称sum礼品总数time_start开始时间time_end结束时间addtime时间prob
抽奖概率为:奖品总数为概率
===================================
项目3 抽奖程序 分时间段
===================================
数据库:
activity_lyq_lottery 奖品表 lotteryid name 礼品名称 sum 礼品总数 time_start 开始时间 time_end 结束时间 addtime 时间 probability 中奖概率 大于0:表示概率 0:表示奖品数为概率 isdisable 是否开启 0开启1关闭 listorder 排序 默认正序 msg 发送短信或显示信息 content 备注 angle 转盘角度 奖品所在的角度 time_1 时间段个数限制 个数限制,-1表示不限制,0表示不发 time_2 time_3 time_4 time_5 time_6 time_7 time_8 time_9 time_10 time_11 time_12 time_13 time_14 time_15 time_16 time_17 activity_lyq_lottery_log 抽奖日志 logid ID uid 用户ID tel 手机号 addtime 抽奖时间 ip 抽奖IP lotteryid 奖品ID iswinning 是否抽中 1抽中0无 result 返状态回值 hao 随机号
主程序:
<?php require_once (APP_ROOT . "./class/class_lib.php"); require_once libfile ( 'class/StoreProcs' ); pc_base::load_app_class('table_sub','',0); /** * 大转盘 * @author Administrator * */ class lib_dzp_lottery extends app_lib { /** * 奖品表 */ public $lottery = 'activity_lyq_lottery'; /** * 奖品日志表 */ public $lottery_log = 'activity_lyq_lottery_log'; /** * n等奖品 */ private $level = array(); /** * 奖品信息 */ private $lotteryArray = array(); /*** * 随机数结束位数 */ private $max = 30000; /** * 类别 true:默认false:掌苏 */ private $type=true; /** * 中奖专业户 */ private $tel_zy=false; /** * 读取配置 */ public function load_setting() { $data=getcache('lyqdzp_setting'); define('TIME', time()); //当前时间 define('L_START', strtotime($data['l_start'])); //报名开始时间 define('L_END', strtotime($data['l_end'])); //报名结束时间,-1意思昨天 23:59:59 define('L_DAY_START',$data['l_day_start']); //每天开始时间 define('L_DAY_END', $data['l_day_end']); //每天结束时间 define('L_DAY_CISHU', $data['l_day_cishu']); //每天获得奖品次数 define('L_CISHU', $data['l_cishu']); //共计获得奖品次数 define('L_MIN', 20); //最少来福币 define('L_LFB', $data['l_lfb']); //减少来福币 define('L_ZY', $data['l_zy']); //专业户 define('L_QUANSHU', $data['l_quanshu']); //圈数,大转盘开始圈数 define('L_KONGJIANG', intval($data['l_kongjiang'])); //空奖概率 $host='www.****.com'; //现网 if($_SERVER['HTTP_HOST']=='221.****0'){ $host='221.*****'; //测试机 }elseif($_SERVER['HTTP_HOST']=='125.com'){ $host='125life.com'; //本地 }elseif(strpos($_SERVER['HTTP_HOST'],'192.168.')==0){ $host=$_SERVER['HTTP_HOST'].'/125e.com'; //本地 } define('L_SITE', 'http://'.$host.'/'); //域名最后加/ define('L_URL', L_SITE.'index.php'); //访问地址 //只能通过flash地址访问 $s=L_SITE.'flash/dzp/i.swf'; if(preg_replace('/swf.*$/','swf',$_SERVER['HTTP_REFERER'])!=$s&&$this->type){ exit('老兄你已经得到得够多了,请通过正规途径摇奖!'); } $this->load(); } /** * 黑名单 */ private $heimingdan = array(); /** * 读取奖品配置 */ public function load() { $this->setlottery (); $this->heimingdan = getcache ( 'tel', 'blanklist' ); } private function setlottery() { $time=strtotime(date('Y-m-d',TIME)); $sql = "select u.*"; $sql .= ", (select COUNT(l.lotteryid) from " . DB::table ( $this->lottery_log ) . " AS l where u.lotteryid=l.lotteryid and l.iswinning='1')as num "; $sql .= " from " . DB::table ( $this->lottery ) . " AS u "; $sql .= " where 1 "; $sql .= " and u.isdisable='0' "; $sql .= " and u.time_start='$time' "; $sql .= " ORDER BY u.listorder "; $d = DB::fetch_all ( $sql ); $sum = 0; foreach ( $d as $r ) { $r ['sum_over'] = intval ( $r ['sum'] ) - intval ( $r ['num'] ); if ($r ['sum'] > 0) { $sum += $r ['sum']; } $r['msg']=str_replace('{name}', $r['name'],$r['msg']); $this->lotteryArray [$r ['lotteryid']] = $r; } if($summax = $sum + $sum * (L_KONGJIANG/100) / ((100-L_KONGJIANG)/100); foreach ( $this->lotteryArray as $r ) { if ($r ['sum'] > 0) { $newsum=$r ['sum']; if($r['probability']>0){ $probability=0; $probability=ceil($r ['sum']*100/$r['probability']); if($probability>0){ $newsum=$probability; } } $this->level [$r ['lotteryid']] ['start'] = $m; $this->level [$r ['lotteryid']] ['end'] = $m + $newsum; $m = $m + $r ['sum']; } } } /** * 检测用户是否中奖 0 谢谢参与,其他 返回奖品data数据 * @param array $user array(uid,tel,ip) */ public function check($user) { if (intval ( $user ['uid'] ) intval(L_END)){ //已经过了活动时间,非常遗憾,谢谢! return -22; } if ($this->get_user_lfb ( $user ['uid'] ) credit ( $user ['uid'], -11, $logid ); return -11; //您的来福币余额不足 } $data = array( 'uid' => $user ['uid'], 'tel' => $user ['tel'], 'ip' => $user ['ip'], 'addtime' => time () ); $logid = DB::insert ( $this->lottery_log, $data, true ); //检查用户 每天 已中奖品数 if ($this->get_lottery ( $user ['uid'], strtotime ( date ( 'Y-m-d', TIME ) ), strtotime ( "+1day", strtotime ( date ( 'Y-m-d', TIME ) ) ), true ) >= L_DAY_CISHU) { $this->credit ( $user ['uid'], -12, $logid ); //很遗憾,你本次什么也没有抽到! return -12; } //检查用户 全部 已中奖品数 if ($this->get_lottery ( $user ['uid'], 0, 0, true ) > L_CISHU&&L_CISHU>0) { $this->credit ( $user ['uid'], -12, $logid ); //很遗憾,你本次什么也没有抽到! return -15; } //检测黑名单,设置概率 if ($this->checkhei ( $user ['tel'] ) > 0) { $this->credit ( $user ['uid'], -13, $logid ); //很遗憾,你本次什么也没有抽到! return -13; } $lotteryid = $this->choujiang(); $this->credit ( $user ['uid'], $lotteryidhao); if ($lotteryid > 0) { return $this->lotteryArray [$lotteryid]; } else { return -4; } //-1奖品已发完 //-2本时段奖品已玩 //-3不发奖品 //-4奖品有问题 //-11您的来福币余额不足 //-12很遗憾,你本次什么也没有抽到! //-13黑名单里面,很遗憾,你本次什么也没有抽到! //-14中奖专业户禁止中高讲高奖品 //-15已超过yizhong总奖品数 //-16 掌苏传递手机 号错误 //-21您来早了,活动还没有开始! //-22已经过了活动时间,非常遗憾,谢谢! //-23对不起,现在不是活动时间,活动时间为每天 } /** * 显示 * @param unknown_type $data */ public function show($data){ $ok=0;//3中奖 $zz=0;//转盘度数 $result='';//奖品名称 $lotteryid=0;//奖品ID if(is_array($data)){ $ok=3; $result=$data['msg']; $zz=$data['angle']+L_QUANSHU*360; $lotteryid=$data['lotteryid']; }else{ $m=''; switch($data){ case 0:{ $m= '请先登录!'; }break; case -11:{ $m= '您的来福币余额不足!'; }break; case -12:{ $m= '很遗憾,你本次什么也没有抽到!'; }break; case -21:{ $m= '您来早了,活动还没有开始!'; }break; case -22:{ $m= '已经过了活动时间,非常遗憾,谢谢!'; }break; case -23:{ $m= '对不起,现在不是活动时间,活动时间为每天'.L_DAY_START.':00-'.L_DAY_END.':00'; }break; default:{ $m= '很遗憾,你本次什么也没有抽到!'; }break; } $result=$m; $ok=3;//3中奖 $zz=360+L_QUANSHU*360;//再接再厉 } header("Expires:Mon,26Jul199705:00:00GMT"); header("Cache-Control:no-cache,must-revalidate"); header("Pragma:no-cache"); header("Content-type:text/html;charset=utf-8"); if(!$this->type){ echo json_encode(array('return'=>$lotteryid, 'msg'=>$result)); }else{ echo '<?xml version="1.0" encoding="UTF-8"?>'."\n"; echo '<gift>'."\n"; echo '<shift ok="'.$ok.'" zz="'.$zz.'" add="9" down="0" lid="0" result="'.$result.'"></shift>'."\n"; echo '</gift>'."\n"; } exit; } /** * 抽奖的号 */ private $hao=0; /** * 抽奖开始 */ private function choujiang() { $j = 0; $lotteryid = 0; $j = mt_rand ( 1, $this->max ); $this->hao=$j; foreach ( $this->level as $k => $r ) { if ($r ['start'] $j) { $lotteryid = $k; break; } } $d = array( 1 => array( 'time' => strtotime ( date ( 'Y-m-d 00:00:00', TIME ) ), 'time_end' => strtotime ( date ( 'Y-m-d 07:59:59', TIME ) ) ) ); for ($i=2;$i strtotime ( date ( 'Y-m-d '.($i+6).':00:00', TIME ) ), 'time_end' => strtotime ( date ( 'Y-m-d '.($i+6).':59:59', TIME ) ) ); } if($lotteryid>0){ $l=$this->lotteryArray [$lotteryid]; $sql = "select count(*) m from " . DB::table ( $this->lottery_log ); $sql .= " where lotteryid='$lotteryid' "; $s= intval ( DB::result_first ( $sql ) ); $sum_over=$l['sum']-$s; if($sum_over>0){ //本时段 奖品数 $sum=0; foreach ($d as $k=>$r){ if(TIME>=$r['time']&&TIME0){//个数限制 $sum=$this->get_lottery_id(0,$r['time'],$r['time_end']+1,$lotteryid); if($sum>=$l['time_'.$k]){ //本时段奖品已玩 $lotteryid=-2; break; } }elseif ($l['time_'.$k]==0){ //不发奖品 $lotteryid=-3; break; }else{ //-1 不限制 } } } if($this->tel_zy && $lotteryid>0&&$lotteryidheimingdan ['tel'] ) && L_ZY > 0) { $this->tel_zy=true; if ($n > L_ZY) { return 1; } }else{ //号码检测 if (!self::check_tel($tel)) { return 1; } } return 0; } /** * 合计奖品数 * @param intval $uid * @param intval $start * @param intval $end * @param bool $bool true 获得奖品数 false 不统计 * @return number */ private function get_lottery($uid = 0, $start = 0, $end = 0, $bool = false) { $sql = "select count(*) m from " . DB::table ( $this->lottery_log ); $sql .= " where 1 "; if (intval ( $start ) > 0) { $sql .= " and addtime>='$start' "; } if (intval ( $end ) > 0) { $sql .= " and addtime0 "; } if (intval ( $uid ) > 0) { $sql .= " and uid='$uid' "; } return intval ( DB::result_first ( $sql ) ); } /** * 合计奖品数 * @param intval $uid * @param intval $start * @param intval $end * @param intval $bool 奖品id * @return number */ private function get_lottery_id($uid = 0, $start = 0, $end = 0, $lotteryid = 0) { $sql = "select count(*) m from " . DB::table ( $this->lottery_log ); $sql .= " where 1 "; if (intval ( $start ) > 0) { $sql .= " and addtime>='$start' "; } if (intval ( $end ) > 0) { $sql .= " and addtime=0) { $sql .= " and lotteryid='$lotteryid' "; } if (intval ( $uid ) > 0) { $sql .= " and uid='$uid' "; } return intval ( DB::result_first ( $sql ) ); } /** * 获取用户来福币 * @param intval $uid * @return number */ public function get_user_lfb($uid) { $sql = "select extcredits2 from sz_common_member_count "; $sql .= " where 1 "; $sql .= " and uid='$uid' "; return intval ( DB::result_first ( $sql ) ); } /** * 记录日志和更新用户来福币 * @param intval $uid * @param intval $r 返回值 * @param intval $logid * @param intval $lotteryid */ private function credit($uid, $result, $logid = 0, $lotteryid = 0,$hao=0) { $data = array(); if ($lotteryid > 0) { $data ['lotteryid'] = $lotteryid; $data ['iswinning'] = 1; } $data ['result'] = $result; $data ['hao'] = $hao; $data ['HTTP_REFERER'] = $_SERVER['HTTP_REFERER']; DB::Update ( $this->lottery_log, $data, " logid='$logid' " ); if (L_LFB > 0) { $sql = 'UPDATE sz_common_member_count SET extcredits2=extcredits2-' . L_LFB . ' WHERE uid=' . $uid; DB::query ( $sql ); $this->credit_log ( $uid, 'reduce', L_LFB, 1, '积分清零活动' ); } } /** *手机号检查 */ private function check_tel($tel){ $different_network=table_sub::get_different_network(); if (!preg_match("/$different_network/",$tel)) { return false; } return true; } /** * 存储过程链接 */ private $StoreProcs; /** * 来福币日志 存储过程 * @param intval $uid * @param string $op add增加 reduce 消耗 * @param intval $creditvalue 来福币 * @param intval $credittype 1来福币 2来福点 * @param string $oreason 说明 */ private function credit_log($uid, $op, $creditvalue, $credittype, $oreason) { if (! $this->StoreProcs) { $this->StoreProcs = new StoreProcs (); } //调用存储过程 $this->StoreProcs->query ( "call app_credit_log($uid,'$op','$credittype',1,$creditvalue,'$oreason')" ); } }
调用:
$dzp=new lib_dzp_lottery(); $u=array('uid'=>$_G ['uid'],'tel'=>$_G ['tel'],'ip'=> $_G ['clientip']); $dzp->load_setting(); $dzp->show($dzp->check($u));

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
