php实现投票
PHP实现投票功能
数据库设计 创建votes表存储投票数据,包含字段:id(主键)、option_id(选项ID)、user_id(用户ID)、created_at(投票时间)。选项表options包含id和name字段。

前端表单 使用HTML表单提交投票选项,表单method设置为POST,action指向处理投票的PHP脚本。单选按钮或下拉菜单用于选择投票选项。

<form action="vote.php" method="post">
<input type="radio" name="vote" value="1"> Option 1
<input type="radio" name="vote" value="2"> Option 2
<button type="submit">Vote</button>
</form>
投票处理脚本 创建vote.php接收并处理投票数据。验证用户是否已投票,防止重复投票。使用PDO预处理语句防止SQL注入。
<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['vote'])) {
$optionId = (int)$_POST['vote'];
$userId = $_SESSION['user_id'] ?? null;
if (!$userId) {
die('请先登录');
}
$stmt = $pdo->prepare("SELECT COUNT(*) FROM votes WHERE user_id = ?");
$stmt->execute([$userId]);
if ($stmt->fetchColumn() > 0) {
die('您已经投过票了');
}
$insert = $pdo->prepare("INSERT INTO votes (option_id, user_id) VALUES (?, ?)");
$insert->execute([$optionId, $userId]);
header('Location: results.php');
exit;
}
?>
结果显示 创建results.php显示投票结果。计算各选项得票数和百分比,使用SQL聚合函数COUNT和GROUP BY。
<?php
$pdo = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$query = $pdo->query("
SELECT o.name, COUNT(v.id) as votes
FROM options o
LEFT JOIN votes v ON o.id = v.option_id
GROUP BY o.id
");
$results = $query->fetchAll(PDO::FETCH_ASSOC);
$totalVotes = array_sum(array_column($results, 'votes'));
?>
<ul>
<?php foreach ($results as $row): ?>
<li>
<?= htmlspecialchars($row['name']) ?>:
<?= $row['votes'] ?> votes
(<?= $totalVotes ? round($row['votes']/$totalVotes*100, 2) : 0 ?>%)
</li>
<?php endforeach; ?>
</ul>
安全措施 验证用户身份防止刷票,使用CSRF令牌防止跨站请求伪造。对输出数据进行htmlspecialchars处理防止XSS攻击。限制每个IP或用户的投票频率。






