php抽奖实现
实现PHP抽奖功能的方法
基本抽奖逻辑
在PHP中实现抽奖功能通常需要以下步骤: $probability = [ '一等奖' => 1, '二等奖' => 5, '三等奖' => 10, '未中奖' => 84 ];
function lottery($probability) { $result = mt_rand(1, 100); $rangeStart = 0;
foreach ($probability as $prize => $rate) {
$rangeEnd = $rangeStart + $rate;
if ($result > $rangeStart && $result <= $rangeEnd) {
return $prize;
}
$rangeStart = $rangeEnd;
}
return '未中奖';
}
数据库集成
将抽奖数据存储在数据库中并实现抽奖: $pdo = new PDO('mysql:host=localhost;dbname=lottery', 'username', 'password'); $stmt = $pdo->query('SELECT prize_name, probability FROM prizes'); $prizes = $stmt->fetchAll(PDO::FETCH_ASSOC);
$lotteryResult = lottery($prizes); echo "恭喜获得:" . $lotteryResult;

防刷机制
为防止用户频繁抽奖,可以添加限制: session_start();
if (!isset($_SESSION['lottery_time'])) { $_SESSION['lottery_time'] = time(); }
if (time() - $_SESSION['lottery_time'] < 3600) { die("每小时只能抽奖一次"); }

$_SESSION['lottery_time'] = time();
奖品库存管理
确保奖品不会被超额发放: $pdo->beginTransaction(); try { $stmt = $pdo->prepare('SELECT quantity FROM prizes WHERE prize_name = ? FOR UPDATE'); $stmt->execute([$lotteryResult]); $prize = $stmt->fetch();
if ($prize['quantity'] > 0) {
$update = $pdo->prepare('UPDATE prizes SET quantity = quantity - 1 WHERE prize_name = ?');
$update->execute([$lotteryResult]);
$pdo->commit();
echo "恭喜获得:" . $lotteryResult;
} else {
$pdo->rollBack();
echo "很遗憾,奖品已发完";
}
} catch (Exception $e) { $pdo->rollBack(); echo "抽奖出错,请重试"; }
前端展示
简单的HTML前端展示: <!DOCTYPE html>
抽奖系统 开始抽奖<script>
document.getElementById('lottery-btn').addEventListener('click', function() {
fetch('lottery.php')
.then(response => response.text())
.then(result => {
document.getElementById('result').innerHTML = result;
});
});
</script>






