ホームページ php教程 php手册 项目3:PHP抽奖程序 ,抽奖规则代码 分时间段

项目3:PHP抽奖程序 ,抽奖规则代码 分时间段

Jun 06, 2016 pm 07:42 PM
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));
ログイン後にコピー




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles