php+MySQL实现抽奖代码问题

php+MySQL实现抽奖代码问题,第1张

首先关于PHP+MYSQL来实现不可以重复抽奖这个很好实现,因为你抽奖的页面要么是动态要么是AJAX来实现的。首先AJAX的先不说,我先说关于动态页面实现。

那么就是加载页面的时候判断对方今日有没有抽过,如果抽过了那么就用if语句来不执行抽奖代码。其实里面还有很多的细节问题,你说让贴出代码,我不愿意抄别人的东西,同时网上给的代码好用的很少。

你要是想做一个有个性的功能还是要自己写的或者修改,不知道你对JS了解多少也没法说。我说的就是大概的思路。

样式千万种,你找到一个你觉得方便而且能达到你目的的同时针对自己的知识的吧。其实不论那种方式都是要用到AJAX的用来确认已经抽过。

你是要一条语句把奖品id为1和2的都显示出来吧?

select 抽奖编号 from 表名 where 奖品id=1

union all

select 抽奖编号 from 表名 where 奖品id=2

首先从数据库mysql查询出有奖项6个的唯一编号作为兑奖号:

sql1:

$sql="select 唯一编号 from table where status=0";

得到数组$real=array('001','002','003','004','005','006',)其中001,002就是唯一编号

然后生成94个空奖

$empty=array('','',...,'',)

最后把数组合并,得到一个全新的数组。

$arr = array_merge($real, $empty)

用户随机在数组中抽取一项

$rand= mt_rand(0, count($arr)-1)

比如$rand抽到了001

if(''!=$rand){

//表示抽中,修改数据状态,这里需要 *** 作数据库

sql2:

$sql="update table set status=1 where 唯一编号=001";

*** 作完成

}else{

//表示没有抽中,不做 *** 作。

}

现在的问题是当100人同时进入抽奖,在红色部分sql2,还没有来的急修改状态的情况下,sql1继续会把001作为没有抽中的奖项,来让其他用户继续抽,这样有可能001再次被抽到。

想请大家帮助php高并发下抽奖程序,如何避免重复中奖及多人抽中同一个奖?

或者从别的思路出发考虑抽奖程序。

并发 php 抽奖


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7397404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存