Home Backend Development PHP Tutorial PHP lottery program code for time periods

PHP lottery program code for time periods

Jul 25, 2016 am 08:58 AM

  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. * Big carousel
  6. * @author Administrator
  7. *
  8. */
  9. class lib_dzp_lottery extends app_lib {
  10. /**
  11. * Prize List
  12. */
  13. public $lottery = 'activity_lyq_lottery';
  14. /**
  15. * Prize Log Sheet
  16. */
  17. public $lottery_log = ' activity_lyq_lottery_log';
  18. /**
  19. * n prizes
  20. */
  21. private $level = array();
  22. /**
  23. * Prize information
  24. */
  25. private $lotteryArray = array();
  26. /***
  27. * Random number ending digits
  28. */
  29. private $max = 30000;
  30. /**
  31. * Category true: Default false: Palm Su
  32. */
  33. private $type=true;
  34. /**
  35. * Winning professional account
  36. */
  37. private $tel_zy=false;
  38. /**
  39. * Read configuration
  40. */
  41. public function load_setting () {
  42. $data=getcache('lyqdzp_setting');
  43. define('TIME', time()); //Current time
  44. define('L_START', strtotime($data['l_start'])); / /Registration start time
  45. define('L_END', strtotime($data['l_end'])); //Registration end time, -1 means yesterday 23:59:59
  46. define('L_DAY_START',$data['l_day_start ']); //Start time of each day
  47. define('L_DAY_END', $data['l_day_end']); //End time of each day
  48. define('L_DAY_CISHU', $data['l_day_cishu']); //Get every day Number of prizes
  49. define('L_CISHU', $data['l_cishu']);//Total number of prizes obtained
  50. define('L_MIN', 20);//Minimum LIFB coins
  51. define('L_LFB', $data[ 'l_lfb']);//Reduce Lifb coins
  52. define('L_ZY', $data['l_zy']); //Professional accounts
  53. define('L_QUANSHU', $data['l_quanshu']);//Circle Count, the number of rounds the big wheel starts to roll
  54. define('L_KONGJIANG', intval($data['l_kongjiang'])); //Probability of empty prize
  55. $host='www.****.com'; //Existing network
  56. if($_SERVER['HTTP_HOST']=='221.****0'){
  57. $host='221.*****'; //Test machine
  58. }elseif($_SERVER['HTTP_HOST ']=='125.com'){
  59. $host='125life.com';//Local
  60. }elseif(strpos($_SERVER['HTTP_HOST'],'192.168.')==0){
  61. $ host=$_SERVER['HTTP_HOST'].'/125e.com';//Local
  62. }
  63. define('L_SITE', 'http://'.$host.'/'); //Add / at the end of the domain name
  64. define('L_URL', L_SITE.'index.php');//Access address
  65. //Can only be accessed through flash address
  66. $s=L_SITE.'flash/dzp/i.swf';
  67. if(preg_replace ('/swf.*$/','swf',$_SERVER['HTTP_REFERER'])!=$s&&$this->type){
  68. exit('Dude, you have got enough, please pass the formal Way to win!');
  69. }
  70. $this->load();
  71. }
  72. /**
  73. * Blacklist
  74. */
  75. private $heimingdan = array();
  76. /**
  77. * Read prize configuration
  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<='$time' ";
  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<100) $sum=1000;
  104. $m = 1;
  105. $probability = 0;
  106. $newsum=0;
  107. //80% empty prize + 20% prize
  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. * Check whether the user has won the prize 0 Thank you for participating, others return prize data
  127. * @param array $user array(uid,tel,ip)
  128. */
  129. public function check($user) {
  130. if (intval ( $user ['uid'] ) < 1) {
  131. //Not logged in
  132. return 0;
  133. }
  134. if(intval(TIME)//You are here early, the event is still going on No start!
  135. return -21;
  136. }
  137. if(intval(TIME)>intval(L_END)){
  138. //The event time has passed, I am very sorry, thank you!
  139. return -22;
  140. }
  141. if ($this->get_user_lfb ( $user ['uid'] ) < L_MIN) {
  142. //$this->credit ( $user ['uid'], -11 , $logid );
  143. return -11; //Your LIF balance is insufficient
  144. }
  145. $data = array(
  146. 'uid' => $user ['uid'],
  147. 'tel' => $user ['tel'],
  148. 'ip' => $user ['ip'],
  149. 'addtime' => time ()
  150. );
  151. $logid = DB::insert ( $this-> lottery_log, $data, true );
  152. //Check the number of prizes the user has won every day
  153. if ($this->get_lottery ( $user ['uid'], strtotime ( date ( 'Y-m-d', TIME ) ), strtotime ( "+1day", strtotime ( date ( 'Y-m-d', TIME ) ) ), true ) >= L_DAY_CISHU) {
  154. $this->credit ( $user ['uid'], -12 , $logid );
  155. //Unfortunately, you didn’t draw anything this time!
  156. return -12;
  157. }
  158. //Check the number of prizes won by the user
  159. if ($this->get_lottery ( $user ['uid'], 0, 0, true ) > L_CISHU&&L_CISHU>0) {
  160. $ this->credit ( $user ['uid'], -12, $logid );
  161. //Unfortunately, you didn’t draw anything this time!
  162. return -15;
  163. }
  164. //Detect blacklist, set probability
  165. if ($this->checkhei ( $user ['tel'] ) > 0) {
  166. $this->credit ( $user [ 'uid'], -13, $logid );
  167. //Unfortunately, you didn't draw anything this time!
  168. return -13;
  169. }
  170. $lotteryid = $this->choujiang();
  171. $this->credit ( $user ['uid'], $lotteryid<1?$lotteryid:0, $logid, $ lotteryid ,$this->hao);
  172. if ($lotteryid > 0) {
  173. return $this->lotteryArray [$lotteryid];
  174. } else {
  175. return -4;
  176. }
  177. //-1 prize Already distributed
  178. //-2 Prizes for this period have been played
  179. //-3 Prizes not distributed
  180. //-4 There is a problem with the prizes
  181. //-11 Your Laifu coin balance is insufficient
  182. //-12 Unfortunately, you Nothing was drawn this time!
  183. //-In the blacklist of 13, unfortunately, you didn’t draw anything this time!
  184. //-14 Winning professional accounts are prohibited from talking about high prizes.
  185. //-15 has exceeded the total number of prizes in yizhong.
  186. //-16 The mobile number sent by Zhangsu is wrong.
  187. //-21 You are early and the event has not started yet!
  188. //-22 has passed the event time, I am very sorry, thank you!
  189. //-23Sorry, it is not the event time now, the event time is every day
  190. }
  191. /**
  192. * Show
  193. * @param unknown_type $data
  194. */
  195. public function show($data){
  196. $ok=0;//3 Winning
  197. $zz= 0;//Roulette degree
  198. $result='';//Prize name
  199. $lotteryid=0;//Prize ID
  200. if(is_array($data)){
  201. $ok=3;
  202. $result=$data[ 'msg'];
  203. $zz=$data['angle']+L_QUANSHU*360;
  204. $lotteryid=$data['lotteryid'];
  205. }else{
  206. $m='';
  207. switch($data) {
  208. case 0:{
  209. $m= 'Please log in first! ';
  210. }break;
  211. case -11:{
  212. $m= 'Your Raffles balance is insufficient! ';
  213. }break;
  214. case -12:{
  215. $m= 'Unfortunately, you didn't draw anything this time! ';
  216. }break;
  217. case -21:{
  218. $m= 'You are early and the event has not started yet! ';
  219. }break;
  220. case -22:{
  221. $m= 'The event time has passed, I am very sorry, thank you! ';
  222. }break;
  223. case -23:{
  224. $m= 'Sorry, it is not the event time now, the event time is every day'.L_DAY_START.':00-'.L_DAY_END.':00';
  225. }break;
  226. default:{
  227. $m= 'Unfortunately, you didn't draw anything this time!';
  228. }break;
  229. }
  230. $result=$m;
  231. $ok=3;//3中奖
  232. $zz=360+L_QUANSHU*360;//再接再厉
  233. }
  234. header("Expires:Mon,26Jul199705:00:00GMT");
  235. header("Cache-Control:no-cache,must-revalidate");
  236. header("Pragma:no-cache");
  237. header("Content-type:text/html;charset=utf-8");
  238. if(!$this->type){
  239. echo json_encode(array('return'=>$lotteryid,
  240. 'msg'=>$result));
  241. }else{
  242. echo ''."n";
  243. echo ''."n";
  244. echo ''."n";
  245. echo ''."n";
  246. }
  247. exit;
  248. }
  249. /**
  250. * Lucky draw number
  251. */
  252. private $hao=0;
  253. /**
  254. *The draw begins
  255. */
  256. private function choujiang() {
  257. $j = 0;
  258. $lotteryid = 0;
  259. $j = mt_rand ( 1, $this->max );
  260. $this->hao=$j;
  261. foreach ( $this->level as $k => $r ) {
  262. if ($r ['start'] <= $j && $r ['end'] > $j) {
  263. $lotteryid = $k;
  264. break;
  265. }
  266. }
  267. $d = array(
  268. 1 => array(
  269. 'time' => strtotime ( date ( 'Y-m-d 00:00:00', TIME ) ),
  270. 'time_end' => strtotime ( date ( 'Y-m-d 07:59:59', TIME ) )
  271. )
  272. );
  273. for ($i=2;$i<=17;$i++){
  274. $d[$i]=array(
  275. 'time' => strtotime ( date ( 'Y-m-d '.($i+6).':00:00', TIME ) ),
  276. 'time_end' => strtotime ( date ( 'Y-m-d '.($i+6).':59:59', TIME ) )
  277. );
  278. }
  279. if($lotteryid>0){
  280. $l=$this->lotteryArray [$lotteryid];
  281. $sql = "select count(*) m from " . DB::table ( $this->lottery_log );
  282. $sql .= " where lotteryid='$lotteryid' ";
  283. $s= intval ( DB::result_first ( $sql ) );
  284. $sum_over=$l['sum']-$s;
  285. if($sum_over>0){
  286. //本时段 奖品数
  287. $sum=0;
  288. foreach ($d as $k=>$r){
  289. if(TIME>=$r['time']&&TIME<=$r['time_end']){
  290. if($l['time_'.$k]>0){//个数限制
  291. $sum=$this->get_lottery_id(0,$r['time'],$r['time_end']+1,$lotteryid);
  292. if($sum>=$l['time_'.$k]){
  293. //本时段奖品已玩
  294. $lotteryid=-2;
  295. break;
  296. }
  297. }elseif ($l['time_'.$k]==0){
  298. //不发奖品
  299. $lotteryid=-3;
  300. break;
  301. }else{
  302. //-1 不限制
  303. }
  304. }
  305. }
  306. if($this->tel_zy && $lotteryid>0&&$lotteryid<4){
  307. $lotteryid=-14;
  308. }
  309. }else{
  310. //奖品已发完
  311. $lotteryid=-1;
  312. }
  313. }else{
  314. //奖品有问题
  315. $lotteryid=-4;
  316. }
  317. return $lotteryid;
  318. }
  319. /**
  320. * Detect blacklist and ordinary users, probability
  321. * @param string $tel
  322. * @return greater than 1 means that drawing is prohibited this time
  323. */
  324. private function checkhei($tel) {
  325. $n = mt_rand ( 1, 100 );
  326. if (in_array ( $tel, $this->heimingdan ['tel'] ) && L_ZY > 0) {
  327. $this->tel_zy=true;
  328. if ($n > L_ZY) {
  329. return 1;
  330. }
  331. }else{
  332. //号码检测
  333. if (!self::check_tel($tel)) {
  334. return 1;
  335. }
  336. }
  337. return 0;
  338. }
  339. /**
  340. * Total number of prizes
  341. * @param intval $uid
  342. * @param intval $start
  343. * @param intval $end
  344. * @param bool $bool true Number of prizes obtained false No statistics
  345. * @return number
  346. */
  347. private function get_lottery($uid = 0, $start = 0, $end = 0, $bool = false) {
  348. $sql = "select count(*) m from " . DB::table ( $this->lottery_log );
  349. $sql .= " where 1 ";
  350. if (intval ( $start ) > 0) {
  351. $sql .= " and addtime>='$start' ";
  352. }
  353. if (intval ( $end ) > 0) {
  354. $sql .= " and addtime<'$end' ";
  355. }
  356. if ($bool) {
  357. $sql .= " and lotteryid>0 ";
  358. }
  359. if (intval ( $uid ) > 0) {
  360. $sql .= " and uid='$uid' ";
  361. }
  362. return intval ( DB::result_first ( $sql ) );
  363. }
  364. /**
  365. * Total number of prizes
  366. * @param intval $uid
  367. * @param intval $start
  368. * @param intval $end
  369. * @param intval $bool prize id
  370. * @return number
  371. */
  372. private function get_lottery_id($uid = 0, $start = 0, $end = 0, $lotteryid = 0) {
  373. $sql = "select count(*) m from " . DB::table ( $this->lottery_log );
  374. $sql .= " where 1 ";
  375. if (intval ( $start ) > 0) {
  376. $sql .= " and addtime>='$start' ";
  377. }
  378. if (intval ( $end ) > 0) {
  379. $sql .= " and addtime<'$end' ";
  380. }
  381. if ($lotteryid>=0) {
  382. $sql .= " and lotteryid='$lotteryid' ";
  383. }
  384. if (intval ( $uid ) > 0) {
  385. $sql .= " and uid='$uid' ";
  386. }
  387. return intval ( DB::result_first ( $sql ) );
  388. }
  389. /**
  390. * Get the user’s Rafflecoins
  391. * @param intval $uid
  392. * @return number
  393. */
  394. public function get_user_lfb($uid) {
  395. $sql = "select extcredits2 from sz_common_member_count ";
  396. $sql .= " where 1 ";
  397. $sql .= " and uid='$uid' ";
  398. return intval ( DB::result_first ( $sql ) );
  399. }
  400. /**
  401. * Record logs and update user LIF coins
  402. * @param intval $uid
  403. * @param intval $r return value
  404. * @param intval $logid
  405. * @param intval $lotteryid
  406. */
  407. private function credit($uid, $result, $logid = 0, $lotteryid = 0,$hao=0) {
  408. $data = array();
  409. if ($lotteryid > 0) {
  410. $data ['lotteryid'] = $lotteryid;
  411. $data ['iswinning'] = 1;
  412. }
  413. $data ['result'] = $result;
  414. $data ['hao'] = $hao;
  415. $data ['HTTP_REFERER'] = $_SERVER['HTTP_REFERER'];
  416. DB::Update ( $this->lottery_log, $data, " logid='$logid' " );
  417. if (L_LFB > 0) {
  418. $sql = 'UPDATE sz_common_member_count SET extcredits2=extcredits2-' . L_LFB . ' WHERE uid=' . $uid;
  419. DB::query ( $sql );
  420. $this->credit_log ( $uid, 'reduce', L_LFB, 1, '积分清零活动' );
  421. }
  422. }
  423. /**
  424. *Mobile number check
  425. */
  426. private function check_tel($tel){
  427. $different_network=table_sub::get_different_network();
  428. if (!preg_match("/$different_network/",$tel)) {
  429. return false;
  430. }
  431. return true;
  432. }
  433. /**
  434. * Stored procedure link
  435. */
  436. private $StoreProcs;
  437. /**
  438. * Laifu Coin log stored procedure
  439. * @param intval $uid
  440. * @param string $op add to increase reduce consumption
  441. * @param intval $creditvalue Laifu Coin
  442. * @param intval $credittype 1 Laifu Coin 2 Laifu Coin Click
  443. * @param string $oreason description
  444. */
  445. private function credit_log($uid, $op, $creditvalue, $credittype, $oreason) {
  446. if (! $this->StoreProcs) {
  447. $this->StoreProcs = new StoreProcs ();
  448. }
  449. //调用存储过程
  450. $this->StoreProcs->query ( "call app_credit_log($uid,'$op','$credittype',1,$creditvalue,'$oreason')" );
  451. }
  452. }
复制代码

三,调用:

  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. ?>
复制代码


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

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,

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to automatically set permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

How to debug CLI mode in PHPStorm? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

Explain the concept of late static binding in PHP. Explain the concept of late static binding in PHP. Mar 21, 2025 pm 01:33 PM

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

How to send a POST request containing JSON data using PHP's cURL library? How to send a POST request containing JSON data using PHP's cURL library? Apr 01, 2025 pm 03:12 PM

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

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.

See all articles