php实现投票
PHP实现投票功能
数据库设计
创建数据库表存储投票数据,例如:
CREATE TABLE `votes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`option_name` varchar(255) NOT NULL,
`votes_count` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
);
前端表单
创建HTML表单让用户选择投票选项:
<form action="vote.php" method="post">
<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>
投票处理脚本
创建vote.php处理投票:
<?php
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 检查连接
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 获取用户投票
$vote = $_POST['vote'];
// 防止SQL注入
$vote = $conn->real_escape_string($vote);
// 更新投票计数
$sql = "UPDATE votes SET votes_count = votes_count + 1 WHERE id = $vote";
if ($conn->query($sql) === TRUE) {
echo "Vote recorded successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
结果显示
创建页面显示投票结果:
<?php
$conn = new mysqli('localhost', 'username', 'password', 'database');
$sql = "SELECT * FROM votes";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row['option_name'] . ": " . $row['votes_count'] . " votes<br>";
}
} else {
echo "No votes yet";
}
$conn->close();
?>
防止重复投票
可以使用会话或cookie防止重复投票:
session_start();
if (isset($_SESSION['voted'])) {
die("You have already voted");
} else {
$_SESSION['voted'] = true;
// 处理投票逻辑
}
安全注意事项
验证用户输入,防止SQL注入和XSS攻击:
$vote = filter_input(INPUT_POST, 'vote', FILTER_VALIDATE_INT);
if ($vote === false || $vote === null) {
die("Invalid vote option");
}
扩展功能
添加时间限制,只允许特定时间段投票:
$start_time = strtotime('2023-01-01 00:00:00');
$end_time = strtotime('2023-01-31 23:59:59');
$current_time = time();
if ($current_time < $start_time || $current_time > $end_time) {
die("Voting is closed");
}






