ホームページ  >  記事  >  バックエンド開発  >  期間用の PHP 宝くじプログラム コード

期間用の PHP 宝くじプログラム コード

WBOY
WBOYオリジナル
2016-07-25 08:58:421292ブラウズ
  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 管理者
  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(); $max = 30000;
  26. /***
  27. * 乱数の末尾の数字
  28. */
  29. private $type=true;
  30. private $tel_zy=false;
  31. /**
  32. * カテゴリ true: デフォルト false: Palm Su
  33. */ () {
  34. $data=getcache('lyqdzp_setting');
  35. define('TIME', time()) //現在時刻
  36. define('L_START', strtotime($data['l_start']); / /登録開始時刻
  37. define('L_END', strtotime($data['l_end'])); //登録終了時刻、-1 は昨日の 23:59:59 を意味します
  38. define('L_DAY_START',$data['l_day_start) ']); //毎日の開始時刻
  39. define('L_DAY_END', $data['l_day_end']) //毎日の終了時刻
  40. define('L_DAY_CISHU', $data['l_day_cishu']); //毎日獲得する賞品の数
  41. define('L_CISHU', $data['l_cishu']);//獲得した賞品の合計数
  42. define('L_MIN', 20);//最低LIFBコイン
  43. define(' L_LFB', $data[ 'l_lfb']);//Lifb コインを減らす
  44. define('L_ZY', $data['l_zy']); //プロアカウント
  45. define('L_QUANSHU', $data['l_quanshu') ]);//サークルカウント、大車輪が回転し始めるラウンド数
  46. define('L_KONGJIANG', intval($data['l_kongjiang'])) //空の賞品の確率
  47. $host='www. ****.com'; //既存のネットワーク
  48. if($_SERVER['HTTP_HOST']=='221.****0'){
  49. $host='221.*****' / /テストマシン
  50. }elseif($_SERVER['HTTP_HOST ']=='125.com'){
  51. $host='125life.com';//ローカル
  52. }elseif(strpos($_SERVER['HTTP_HOST'], '192.168.')==0){
  53. $ host=$_SERVER['HTTP_HOST'].'/125e.com';//ローカル
  54. }
  55. define('L_SITE', 'http://'.$host .'/'); //ドメイン名の末尾に/を追加
  56. define('L_URL', L_SITE.'index.php');//アクセスアドレス
  57. //フラッシュアドレスからのみアクセス可能
  58. $ s=L_SITE.'flash/dzp/i.swf';
  59. if(preg_replace ('/swf.*$/','swf',$_SERVER['HTTP_REFERER'])!=$s&&$this->type ){
  60. exit('おい、もう十分だ、勝つための正式な方法をパスしてください!');
  61. }
  62. $this->load();
  63. /**
  64. * プロアカウントを獲得
  65. */
  66. private $ハイミンダン = array();
  67. /**
  68. * 構成の読み取り
  69. */
  70. パブリック関数load() {
  71. $this->setlottery ();
  72. $this->ハイミンダン = getcache ( 'tel', 'blanklist' ) ;
  73. }
  74. プライベート関数 setlottery() {
  75. $time=strtotime(date ('Y-m-d',TIME));
  76. $sql = "select u.*"; (select COUNT( l.lotteryid) from " . DB::table ( $this->lotteryid ) . " AS l where u.lotteryid=l.lotteryid and l.iswining='1')as num ";
  77. $sql .= " from " . DB::table ( $this->lottery ) . " AS u ";
  78. $sql .= " where 1 ";
  79. $sql .= " and u.isdisable='0' ";
  80. $sql .= " および u.time_start<='$time' ";
  81. $ sql .= " および u.time_end>='$time' ";
  82. $sql .= " u.listorder によって注文 "; DB::fetch_all ( $sql );
  83. $sum = 0;
  84. foreach ( $d as $r ) {
  85. $r ['sum_over'] = intval ( $r ['sum'] ) - intval [ 'num'] );
  86. if ($r ['sum'] > 0) {
  87. $sum += $r ['sum']
  88. }
  89. $r['msg']=str_replace('{name) }', $r['name'],$r['msg' ]);
  90. $this->lotteryArray [$r ['lotteryid']] = $r; $sum=1000;
  91. $m = 1;
  92. $newsum=0;
  93. //空の賞金 + 20% の賞金
  94. $sum + $sum * (L_KONGJIANG) /100) / ((100-L_KONGJIANG)/100);
  95. foreach ( $this->lotteryArray as $r ) {
  96. if ($r ['sum'] > 0) {
  97. $newsum=$r [ '合計'];
  98. if($r['確率']> 0){
  99. $確率=0;
  100. $確率=ceil($r ['合計']*100/$r['確率']) ;
  101. if($確率>0){
  102. $ニュースム=$確率;
  103. }
  104. $this->レベル [$r ['lotteryid']] ['start'] = $m; >レベル [$r ['lotteryid']] ['end'] = $m + $newsum;
  105. }
  106. }
  107. }
  108. /**
  109. * ブラックリスト
  110. */
  111. public function check($user) {
  112. if (intval ( $user ['uid'] ) < 1) {
  113. //ログインしていません
  114. return
  115. }
  116. if(intval(TIME) //早く来ましたね、イベントはまだ続いています、スタートしません!
  117. return -21;
  118. }
  119. if(intval(TIME)>intval(L_END)){
  120. //イベント時間が過ぎてしまいました、大変申し訳ございません、ありがとうございます!
  121. return -22;
  122. if ($this->get_user_lfb ( $user ['uid'] ) < L_MIN) {
  123. //$this->credit ( $user ['uid'], -11 , $logid );
  124. return -11; //LIF 残高が不足しています
  125. }
  126. $data = array(
  127. 'uid' => $user ['uid'],
  128. 'tel' => ['tel'],
  129. 'ip' => $user ['ip'],
  130. 'addtime' => 時間 ()
  131. ); $data, true );
  132. //ユーザーが毎日獲得した賞品の数を確認します
  133. if ($this->get_lottery ( $user ['uid'], strtotime ( date ( 'Y-m-d', TIME ) ), strtotime ( "+1day", strtotime ( date ( 'Y-m-d', TIME ) ) ), true ) >= L_DAY_CISHU) {
  134. $this->credit ( $user ['uid'], -12 , $logid );
  135. //残念ながら、今回は何も描画されませんでした。
  136. return -12;
  137. //ユーザーが獲得した賞品の数を確認する
  138. if ($this->get_lottery ( $user ['uid'], 0, 0, true ) > L_CISHU&&L_CISHU>0) {
  139. $ this->credit ( $user ['uid'], -12, $logid );
  140. //残念ながら、今回は何も描画されていません!
  141. return -15;
  142. }
  143. //ブラックリストを検出、確率を設定
  144. if ($this->checkhei ( $user ['tel'] ) > 0) {
  145. $this->credit ( $user [ ' uid'], -13, $logid );
  146. //残念ながら、今回は何も描画されませんでした。
  147. return -13;
  148. $lotteryid = $this->chojiang();
  149. $this->credit ( $user ['uid'], $lotteryidif ($lotteryid > 0) {
  150. return $this->lotteryid]; else {
  151. return -4;
  152. //-1 賞金すでに配布されました
  153. //-2 この期間の賞品はプレイされました
  154. //-3 賞品は配布されていません
  155. //-4 賞品に問題があります
  156. //-11 ライフコインの残高が不足しています
  157. //-12残念ながら今回は何も描かれませんでした!
  158. //-ブラックリスト 13 の中で、残念ながら今回は何も描かれていませんでした。
  159. //-14 当選したプロアカウントは高額賞金について話すことを禁止します
  160. //-15 が宜中賞品の総数を超えました
  161. //- 送信された携帯電話番号が間違っています。 21 早いのにイベントはまだ始まっていません!
  162. //-22はイベント時間を過ぎてしまいました、大変申し訳ございません、ありがとうございました!
  163. //-23申し訳ありませんが、今はイベント時間ではありません。イベント時間は毎日です
  164. }
  165. /**
  166. * 表示
  167. * @paramknown_type $data
  168. */
  169. public function show($data){
  170. $ok=0;//3 勝ち
  171. $zz= 0;//ルーレットの度数
  172. $result='';//賞品名
  173. $lotteryid=0;//賞品ID
  174. if(is_array($data)){
  175. $ok=3; =$data['msg'];
  176. $zz=$data['angle']+L_QUANSHU*360;
  177. $lotteryid=$data['lotteryid'];
  178. $m=''; ($data) {
  179. case 0:{
  180. $m= 'まずログインしてください。 ';
  181. }break;
  182. case -11:{
  183. $m= 'ラッフルズの残高が不足しています! ';
  184. }break;
  185. case -12:{
  186. $m= '残念ながら、今回は何も描画されませんでした。 ';
  187. }break;
  188. case -21:{
  189. $m= 'まだイベントは始まっていません! ';
  190. }break;
  191. case -22:{
  192. $m= 'イベント時間が過ぎてしまいました、申し訳ありません、ありがとうございます! ';
  193. }break;
  194. case -23:{
  195. $m= '申し訳ありませんが、今はイベントの時間ではありません。イベントの時間は毎日です'.L_DAY_START.':00-'.L_DAY_END.':00';
  196. }break;
  197. default:{
  198. $m= '残念ながら、今回は何も描画されていません!';
  199. }休憩;
  200. }
  201. $結果=$m;
  202. $ok=3;//3中奖
  203. $zz=360+L_QUANSHU*360;//再接再厉
  204. }
  205. header("Expires:Mon,26Jul199705:00:00GMT");
  206. header("キャッシュ制御:キャッシュなし、再検証が必要");
  207. header("Pragma:no-cache");
  208. header("Content-type:text/html;charset=utf-8");
  209. if(!$this->type){
  210. echo json_encode(array('return'=>$lotteryid,
  211. 'msg'=>$result));
  212. }else{
  213. echo ''."n";
  214. echo ''."n";
  215. echo '
  216. echo ''."n";
  217. }
  218. 終了;
  219. }
  220. /**
  221. * 抽選番号
  222. */
  223. プライベート $hao=0;
  224. /**
  225. *抽選が始まります
  226. */
  227. プライベート関数 chojiang() {
  228. $j = 0;
  229. $lotteryid = 0;
  230. $j = mt_rand ( 1, $this->max );
  231. $this->ハオ=$j;
  232. foreach ( $this->level as $k => $r ) {
  233. if ($r ['start'] <= $j && $r ['end'] > $j) {
  234. $宝くじID = $k;
  235. 休憩;
  236. }
  237. }
  238. $d = array(
  239. 1 => array(
  240. 'time' => strtotime ( date ( 'Y-m-d 00:00:00', TIME ) ),
  241. 'time_end' => strtotime (日付 ('Y-m-d 07:59:59', TIME ) )
  242. )
  243. );
  244. for ($i=2;$i<=17;$i++){
  245. $d[$i]=array(
  246. 'time' => strtotime ( date ( 'Y-m-d '.($i+6). ':00:00', TIME ) ),
  247. 'time_end' => strtotime ( date ( 'Y-m-d '.($i+6).':59:59', TIME ) )
  248. );
  249. }
  250. if($lotteryid>0){
  251. $l=$this->lotteryArray [$lotteryid];
  252. $sql = "select count(*) m from " . DB::table ( $this->lottery_log );
  253. $sql .= " wherelotteryid='$lotteryid' ";
  254. $s= intval ( DB::result_first ( $sql ) );
  255. $sum_over=$l['sum']-$s;
  256. if($sum_over>0){
  257. //今回のタイムセグメントの品数
  258. $sum=0;
  259. foreach ($d as $k=>$r){
  260. if(TIME>=$r['time']&&TIME<=$r['time_end']){
  261. if($l['time_'. $k]>0){// 数制限
  262. $sum=$this->get_lottery_id(0,$r['time'],$r['time_end']+1,$lotteryid);
  263. if($sum>=$l['time_'.$k]){
  264. //本時間段奖品已玩
  265. $lotteryid=-2;
  266. 休憩;
  267. }
  268. }elseif ($l['time_'.$k]==0){
  269. //不発行奖品
  270. $lotteryid=-3;
  271. 休憩;
  272. }else{
  273. //-1 無制限
  274. }
  275. }
  276. }
  277. if($this->tel_zy && $lotteryid>0&&$lotteryid<4){
  278. $lotteryid=-14;
  279. }
  280. }else{
  281. //奖品已発行完
  282. $lotteryid=-1;
  283. }
  284. }else{
  285. //奖品有问题
  286. $lotteryid=-4;
  287. }
  288. $lotteryid を返します;
  289. }
  290. /**
  291. * ブラックリストと一般ユーザーの検出、確率
  292. * @param string $tel
  293. * @return が 1 より大きい場合、今回は描画が禁止されていることを意味します
  294. */
  295. プライベート関数 checkhei($tel) {
  296. $n = mt_rand ( 1, 100 );
  297. if (in_array ( $tel, $this->heimingdan ['tel'] ) && L_ZY > 0) {
  298. $this->tel_zy=true;
  299. if ($n > L_ZY) {
  300. return 1;
  301. }
  302. }else{
  303. //号码检测
  304. if (!self::check_tel($tel)) {
  305. return 1;
  306. }
  307. }
  308. 0を返す;
  309. }
  310. /**
  311. * 賞品の総数
  312. * @param intval $uid
  313. * @param intval $start
  314. * @param intval $end
  315. * @param bool $bool true 取得した賞品の数 false 統計情報なし
  316. * @return number
  317. */
  318. private function get_lottery($uid = 0, $start = 0, $end = 0, $bool = false) {
  319. $sql = "select count(*) m from " 。 DB::table ( $this->lottery_log );
  320. $sql .= " ここで 1 ";
  321. if (intval ( $start ) > 0) {
  322. $sql .= " and addtime>='$start' ";
  323. }
  324. if (intval ( $end ) > 0) {
  325. $sql .= " and addtime<'$end' ";
  326. }
  327. if ($bool) {
  328. $sql .= " andlotteryid>0 ";
  329. }
  330. if (intval ( $uid ) > 0) {
  331. $sql .= " and uid='$uid' ";
  332. }
  333. return intval ( DB::result_first ( $sql ) );
  334. }
  335. /**
  336. * 賞品の総数
  337. * @param intval $uid
  338. * @param intval $start
  339. * @param intval $end
  340. * @param intval $bool 賞品 ID
  341. * @return Number
  342. */
  343. private function get_lottery_id($uid = 0, $start = 0, $end = 0, $lotteryid = 0) {
  344. $sql = "select count(*) m from 「。」 DB::table ( $this->lottery_log );
  345. $sql .= " ここで 1 ";
  346. if (intval ( $start ) > 0) {
  347. $sql .= " and addtime>='$start' ";
  348. }
  349. if (intval ( $end ) > 0) {
  350. $sql .= " and addtime<'$end' ";
  351. }
  352. if ($lotteryid>=0) {
  353. $sql .= " andlotteryid='$lotteryid' ";
  354. }
  355. if (intval ( $uid ) > 0) {
  356. $sql .= " and uid='$uid' ";
  357. }
  358. return intval ( DB::result_first ( $sql ) );
  359. }
  360. /**
  361. * ユーザーの Rafflecoin を取得します
  362. * @param intval $uid
  363. * @return number
  364. */
  365. public function get_user_lfb($uid) {
  366. $sql = "sz_common_member_count から extcredits2 を選択 ";
  367. $sql .= " ここで 1 ";
  368. $sql .= " および uid='$uid' ";
  369. return intval ( DB::result_first ( $sql ) );
  370. }
  371. /**
  372. * ログを記録し、ユーザー LIF コインを更新します
  373. * @param intval $uid
  374. * @param intval $r 戻り値
  375. * @param intval $logid
  376. * @param intval $lotteryid
  377. */
  378. プライベート関数 Credit($uid, $result, $logid = 0, $lotteryid = 0,$hao=0) {
  379. $data = array();
  380. if ($lotteryid > 0) {
  381. $data ['lotteryid'] = $lotteryid;
  382. $data ['iswin'] = 1;
  383. }
  384. $data ['結果'] = $結果;
  385. $data ['ハオ'] = $ハオ;
  386. $data ['HTTP_REFERER'] = $_SERVER['HTTP_REFERER'];
  387. DB::Update ( $this->lottery_log, $data, " logid='$logid' " );
  388. if (L_LFB > 0) {
  389. $sql = 'UPDATE sz_common_member_count SET extcredits2=extcredits2-' . L_LFB 。 ' WHERE uid=' 。 $uid;
  390. DB::クエリ ( $sql );
  391. $this->credit_log ( $uid, 'reduce', L_LFB, 1, '积分清零活' );
  392. }
  393. }
  394. /**
  395. *携帯電話番号の確認
  396. */
  397. プライベート関数 check_tel($tel){
  398. $ Different_network=table_sub::get_ Different_network();
  399. if (!preg_match("/$ Different_network/",$tel)) {
  400. return false;
  401. }
  402. true を返します。
  403. }
  404. /**
  405. * ストアド プロシージャのリンク
  406. */
  407. private $StoreProcs;
  408. /**
  409. * Laifu Coin ログ ストアド プロシージャ
  410. * @param intval $uid
  411. * @param string $op 追加して消費量を削減します
  412. * @param intval $creditvalue Laifu Coin
  413. * @param intval $credittype 1 Laifu Coin 2 Laifu Coin Click
  414. * @param string $oreason の説明
  415. */
  416. プライベート関数credit_log($uid, $op, $creditvalue, $credittype, $oreason) {
  417. if (! $this->StoreProcs) {
  418. $this->StoreProcs =新しい StoreProcs ();
  419. }
  420. //调用存储过程
  421. $this->StoreProcs->query ( "call app_credit_log($uid,'$op','$credittype',1,$creditvalue,'$oreason')" );
  422. }
  423. }
复制代

三、调用:

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


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