php实现网页投票
PHP实现网页投票功能
创建一个简单的网页投票系统需要处理用户投票、记录结果和防止重复投票。以下是实现方法:
数据库准备 创建MySQL数据库表存储投票选项和结果:
CREATE TABLE votes (
id INT AUTO_INCREMENT PRIMARY KEY,
option_name VARCHAR(255) NOT NULL,
vote_count INT DEFAULT 0
);
HTML投票表单 创建投票界面表单:
<form method="post" action="vote.php">
<input type="radio" name="vote" value="1"> Option 1<br>
<input type="radio" name="vote" value="2"> Option 2<br>
<input type="radio" name="vote" value="3"> Option 3<br>
<input type="submit" value="Vote">
</form>
PHP投票处理(vote.php)
<?php
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 检查连接
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 处理投票
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$selectedOption = (int)$_POST['vote'];
// 防止SQL注入
$stmt = $conn->prepare("UPDATE votes SET vote_count = vote_count + 1 WHERE id = ?");
$stmt->bind_param("i", $selectedOption);
$stmt->execute();
// 设置cookie防止重复投票
setcookie('voted', '1', time() + 86400); // 24小时有效
echo "Thank you for voting!";
}
// 显示结果
$result = $conn->query("SELECT * FROM votes");
while ($row = $result->fetch_assoc()) {
echo $row['option_name'] . ": " . $row['vote_count'] . " votes<br>";
}
$conn->close();
?>
防止重复投票 使用Cookie或Session防止同一用户多次投票:
session_start();
if (isset($_SESSION['voted'])) {
die("You have already voted!");
}
// 投票成功后设置session
$_SESSION['voted'] = true;
安全增强措施 添加IP记录限制:
$ip = $_SERVER['REMOTE_ADDR'];
$check = $conn->query("SELECT * FROM vote_ips WHERE ip = '$ip'");
if ($check->num_rows > 0) {
die("You have already voted from this IP!");
}
// 记录IP
$conn->query("INSERT INTO vote_ips (ip) VALUES ('$ip')");
结果显示优化 使用图表显示投票结果:
$total = $conn->query("SELECT SUM(vote_count) as total FROM votes")->fetch_assoc()['total'];
$result = $conn->query("SELECT * FROM votes");
while ($row = $result->fetch_assoc()) {
$percent = ($row['vote_count'] / $total) * 100;
echo '<div style="margin: 5px 0;">
'.$row['option_name'].'
<div style="background: #ddd; height: 20px; width: '.$percent.'%"></div>
'.round($percent,1).'% ('.$row['vote_count'].' votes)
</div>';
}
这个实现包含了基本投票功能、结果展示和防止作弊机制。可以根据需要扩展更复杂的功能如用户认证、多主题投票等。







