Simple entry, no confusion
No complicated entry methods, multiple pricing tiers, or unclear odds. Just a clear process from start to finish.
TRUSTED, FAIR, COMMUNITY-LED
We keep entry simple, draws fair, and winner selection transparent, so you always know how things work.
At CultComps, we believe entering a competition should be simple, transparent, and fair. We are not here to criticise others, only to be clear about how we do things and why.
You choose your tickets, answer a simple question, and you are in. No hidden steps or unnecessary complexity.
No complicated entry methods, multiple pricing tiers, or unclear odds. Just a clear process from start to finish.
Every valid entry has an equal chance of winning, with no hidden mechanics running in the background.
Draws are run in our own platform to keep every stage consistent, traceable, and easy to follow.
Every valid entry has an equal chance of winning. We do not weight entries or apply hidden mechanics behind the scenes.
What you see is what you get.
Many competition sites use external random number tools, and that can be a perfectly valid approach. We have chosen a different path by building the draw process directly into our own platform.
Our focus is not on saying one method is better than another. It is on creating a smooth, connected, and consistent experience for our community.
Running draws in-platform lets us link them directly with live draws, instant confirmations, and automated winner emails. This keeps everything clear, timely, and easy to follow.
It also keeps the full process in one place rather than relying on third-party pages. External generators are widely used, but any web-based tool can theoretically be imitated or altered in certain situations.
We are not suggesting that is common. Keeping things in-house helps us maintain consistency and clarity from start to finish.
We aim to make winners visible and easy to verify. Where possible, draws are carried out live and results are shared clearly with our community.
CultComps is not just a website. It is something we are building for a growing community of people who enjoy the excitement of competitions.
We listen, we improve, and we aim to keep things fair and enjoyable for everyone involved.
We run the same process every time. Here is how a winning ticket is selected.
Before a draw runs, our system creates the eligible ticket pool. A ticket is only included if it:
We use PHP's random_int() function to generate the winning position.
This is a cryptographically secure random function, which means the output is unbiased and not predictable in normal use.
Once we know how many eligible tickets there are, we generate a random position in that range. If there are 5,000 eligible tickets, the system generates a random position from that pool and selects the ticket at that position.
All competitions are closed before the draw takes place. Once closed, no further entries or changes can be made.
The winner is then selected at random from all valid entries using a secure method, ensuring every ticket has an equal and fair chance. Draw queries use prepared statements with bound parameters to keep handling safe and consistent.
This method gives each eligible ticket the same mathematical chance of being selected. The selection is automated by the server using the same process each time.
This is a simplified version of the method we use in production. We share it publicly so anyone can understand the flow.
$eligibleCountStmt = $pdo->prepare("
SELECT COUNT(*)
FROM tickets
WHERE item_id = :item_id
AND is_valid = 1
AND user_id IS NOT NULL
");
$eligibleCountStmt->bindValue(':item_id', $item_id, PDO::PARAM_INT);
$eligibleCountStmt->execute();
$eligibleCount = (int) $eligibleCountStmt->fetchColumn();
if ($eligibleCount <= 0) {
$error = 'No eligible sold tickets remain for main-prize draws in this competition.';
} else {
$winnerOffset = random_int(0, $eligibleCount - 1);
$winnerStmt = $pdo->prepare("
SELECT id, user_id, ticket_number
FROM tickets
WHERE item_id = :item_id
AND is_valid = 1
AND user_id IS NOT NULL
ORDER BY id ASC
LIMIT 1 OFFSET :winner_offset
");
$winnerStmt->bindValue(':item_id', $item_id, PDO::PARAM_INT);
$winnerStmt->bindValue(':winner_offset', $winnerOffset, PDO::PARAM_INT);
$winnerStmt->execute();
$winnerTicket = $winnerStmt->fetch(PDO::FETCH_ASSOC);
}
In plain terms:
The system checks how many valid tickets are in the draw. If there are no valid tickets, it stops.
If there are valid tickets, it generates one secure random position in that list and returns the ticket at that position as the winner. This means each eligible ticket has an equal chance.