php实现网页投票
PHP 网页投票系统实现
创建一个简单的网页投票系统需要处理用户投票、数据存储和结果显示。以下是关键实现步骤:
数据库设计
创建用于存储投票选项和结果的表:

CREATE TABLE vote_options (
id INT AUTO_INCREMENT PRIMARY KEY,
option_name VARCHAR(255) NOT NULL
);
CREATE TABLE vote_results (
id INT AUTO_INCREMENT PRIMARY KEY,
option_id INT,
vote_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (option_id) REFERENCES vote_options(id)
);
投票表单页面(vote_form.php)
<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=vote_system', 'username', 'password');
// 获取投票选项
$options = $db->query("SELECT * FROM vote_options")->fetchAll(PDO::FETCH_ASSOC);
?>
<form action="process_vote.php" method="post">
<?php foreach ($options as $option): ?>
<label>
<input type="radio" name="vote" value="<?= $option['id'] ?>">
<?= htmlspecialchars($option['option_name']) ?>
</label><br>
<?php endforeach; ?>
<button type="submit">投票</button>
</form>
处理投票(process_vote.php)
<?php
session_start();
$db = new PDO('mysql:host=localhost;dbname=vote_system', 'username', 'password');
// 防止重复投票
if (isset($_SESSION['voted'])) {
die('您已经投过票了');
}
if (isset($_POST['vote'])) {
$optionId = (int)$_POST['vote'];
// 验证选项是否存在
$stmt = $db->prepare("SELECT id FROM vote_options WHERE id = ?");
$stmt->execute([$optionId]);
if ($stmt->fetch()) {
// 记录投票
$db->prepare("INSERT INTO vote_results (option_id) VALUES (?)")
->execute([$optionId]);
$_SESSION['voted'] = true;
header('Location: results.php');
exit;
}
}
header('Location: vote_form.php');
显示结果(results.php)
<?php
$db = new PDO('mysql:host=localhost;dbname=vote_system', 'username', 'password');
// 获取投票统计
$results = $db->query("
SELECT o.option_name, COUNT(r.id) as vote_count
FROM vote_options o
LEFT JOIN vote_results r ON o.id = r.option_id
GROUP BY o.id
")->fetchAll(PDO::FETCH_ASSOC);
// 计算总票数
$total = array_sum(array_column($results, 'vote_count'));
?>
<h3>投票结果</h3>
<?php foreach ($results as $result): ?>
<div>
<?= htmlspecialchars($result['option_name']) ?>:
<?= $result['vote_count'] ?> 票
(<?= $total > 0 ? round($result['vote_count'] / $total * 100, 2) : 0 ?>%)
</div>
<?php endforeach; ?>
安全增强措施
- 使用预处理语句防止SQL注入
- 对输出内容使用htmlspecialchars()防止XSS攻击
- 通过会话控制防止重复投票
- 验证用户输入的投票选项是否存在
可选扩展功能
- 添加IP限制防止多账号投票
- 实现图形化结果展示(使用Chart.js等库)
- 添加投票截止时间功能
- 实现多语言支持
- 添加管理员界面管理投票选项
这个基础实现可以根据具体需求进行扩展和定制。






