php 实现投票
PHP 实现投票功能
数据库设计
创建一个数据库表存储投票数据,例如:
CREATE TABLE votes (
id INT AUTO_INCREMENT PRIMARY KEY,
option_name VARCHAR(255) NOT NULL,
vote_count INT DEFAULT 0
);
插入投票选项
初始化投票选项到数据库:
$options = ['Option 1', 'Option 2', 'Option 3'];
foreach ($options as $option) {
$stmt = $pdo->prepare("INSERT INTO votes (option_name) VALUES (?)");
$stmt->execute([$option]);
}
显示投票界面
创建HTML表单显示投票选项:
$stmt = $pdo->query("SELECT * FROM votes");
while ($row = $stmt->fetch()) {
echo "<form method='post'>";
echo "<input type='hidden' name='option_id' value='{$row['id']}'>";
echo "<button type='submit'>{$row['option_name']}</button>";
echo "</form>";
}
处理投票提交
接收并处理投票请求:
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['option_id'])) {
$optionId = (int)$_POST['option_id'];
$stmt = $pdo->prepare("UPDATE votes SET vote_count = vote_count + 1 WHERE id = ?");
$stmt->execute([$optionId]);
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
显示投票结果
查询并显示当前投票结果:
$stmt = $pdo->query("SELECT * FROM votes ORDER BY vote_count DESC");
echo "<h3>投票结果</h3>";
while ($row = $stmt->fetch()) {
echo "<p>{$row['option_name']}: {$row['vote_count']}票</p>";
}
防止重复投票
使用会话防止同一用户重复投票:
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_SESSION['voted'])) {
echo "您已经投过票了";
} else {
$_SESSION['voted'] = true;
// 处理投票逻辑
}
}
使用AJAX无刷新投票
使用jQuery实现无刷新投票:
$('.vote-btn').click(function() {
var optionId = $(this).data('id');
$.post('vote.php', {option_id: optionId}, function(data) {
$('#results').html(data);
});
});
安全性考虑
对输入进行验证和过滤:

$optionId = filter_input(INPUT_POST, 'option_id', FILTER_VALIDATE_INT);
if ($optionId === false || $optionId === null) {
die("无效的投票选项");
}
完整示例代码
<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['option_id'])) {
$optionId = filter_input(INPUT_POST, 'option_id', FILTER_VALIDATE_INT);
if ($optionId && !isset($_SESSION['voted'])) {
$_SESSION['voted'] = true;
$stmt = $pdo->prepare("UPDATE votes SET vote_count = vote_count + 1 WHERE id = ?");
$stmt->execute([$optionId]);
}
}
$stmt = $pdo->query("SELECT * FROM votes");
?>
<!DOCTYPE html>
<html>
<body>
<?php while ($row = $stmt->fetch()): ?>
<form method="post">
<input type="hidden" name="option_id" value="<?= $row['id'] ?>">
<button type="submit"><?= htmlspecialchars($row['option_name']) ?></button>
</form>
<?php endwhile; ?>
<h3>投票结果</h3>
<?php
$result = $pdo->query("SELECT * FROM votes ORDER BY vote_count DESC");
while ($row = $result->fetch()): ?>
<p><?= htmlspecialchars($row['option_name']) ?>: <?= $row['vote_count'] ?>票</p>
<?php endwhile; ?>
</body>
</html>






