php实现投票
实现投票功能的基本步骤
在PHP中实现投票功能通常涉及前端表单提交、后端数据处理和数据库存储。以下是关键步骤和代码示例。
创建投票表单
构建一个简单的HTML表单,让用户选择投票选项并提交:

<form action="vote.php" method="post">
<h3>请选择您喜欢的选项:</h3>
<input type="radio" name="vote" value="option1"> 选项1<br>
<input type="radio" name="vote" value="option2"> 选项2<br>
<input type="radio" name="vote" value="option3"> 选项3<br>
<input type="submit" value="提交投票">
</form>
处理投票数据
创建vote.php文件处理表单提交,验证并存储投票结果:
<?php
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 验证投票数据
if (isset($_POST['vote']) && in_array($_POST['vote'], ['option1', 'option2', 'option3'])) {
$vote = $_POST['vote'];
// 防止重复投票(简单示例)
session_start();
if (!isset($_SESSION['voted'])) {
$_SESSION['voted'] = true;
// 更新数据库
$sql = "UPDATE votes SET count = count + 1 WHERE option_name = '$vote'";
if ($conn->query($sql) === TRUE) {
echo "投票成功!";
} else {
echo "错误: " . $sql . "<br>" . $conn->error;
}
} else {
echo "您已经投过票了!";
}
} else {
echo "无效的投票选项!";
}
$conn->close();
?>
创建投票数据表
在MySQL中创建存储投票结果的表:

CREATE TABLE votes (
id INT AUTO_INCREMENT PRIMARY KEY,
option_name VARCHAR(50) NOT NULL,
count INT DEFAULT 0
);
-- 插入初始选项
INSERT INTO votes (option_name, count) VALUES
('option1', 0),
('option2', 0),
('option3', 0);
显示投票结果
创建results.php显示当前投票统计:
<?php
$conn = new mysqli('localhost', 'username', 'password', 'database');
$sql = "SELECT option_name, count FROM votes ORDER BY count DESC";
$result = $conn->query($sql);
echo "<h3>当前投票结果:</h3>";
echo "<table border='1'><tr><th>选项</th><th>票数</th></tr>";
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["option_name"]."</td><td>".$row["count"]."</td></tr>";
}
echo "</table>";
$conn->close();
?>
安全增强措施
为防止SQL注入和滥用,应增加以下安全措施:
// 使用预处理语句防止SQL注入
$stmt = $conn->prepare("UPDATE votes SET count = count + 1 WHERE option_name = ?");
$stmt->bind_param("s", $vote);
// 添加IP限制防止多次投票
$ip = $_SERVER['REMOTE_ADDR'];
$check_ip = $conn->query("SELECT * FROM vote_logs WHERE ip = '$ip'");
if ($check_ip->num_rows > 0) {
die("每个IP只能投票一次");
}
// 记录投票IP
$conn->query("INSERT INTO vote_logs (ip) VALUES ('$ip')");
创建投票日志表
CREATE TABLE vote_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
ip VARCHAR(50) NOT NULL,
vote_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);






