当前位置:首页 > PHP

php 实现投票

2026-03-12 19:47:13PHP

PHP 实现投票功能

数据库设计

创建投票相关的数据库表结构,通常需要至少两个表:一个存储投票主题,另一个存储投票选项和结果。

CREATE TABLE `polls` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `question` varchar(255) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

CREATE TABLE `poll_options` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `poll_id` int(11) NOT NULL,
  `option_text` varchar(255) NOT NULL,
  `votes` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  FOREIGN KEY (`poll_id`) REFERENCES `polls` (`id`)
);

创建投票表单

构建一个简单的HTML表单让用户进行投票选择。

php 实现投票

<form action="vote.php" method="post">
  <h3><?php echo htmlspecialchars($poll['question']); ?></h3>
  <?php foreach ($options as $option): ?>
    <div>
      <input type="radio" name="vote" value="<?php echo $option['id']; ?>" id="option<?php echo $option['id']; ?>">
      <label for="option<?php echo $option['id']; ?>"><?php echo htmlspecialchars($option['option_text']); ?></label>
    </div>
  <?php endforeach; ?>
  <button type="submit">投票</button>
</form>

处理投票逻辑

创建vote.php文件处理用户提交的投票。

// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');

// 获取投票选项ID
$optionId = $_POST['vote'];

// 更新投票计数
$stmt = $db->prepare("UPDATE poll_options SET votes = votes + 1 WHERE id = ?");
$stmt->execute([$optionId]);

// 重定向回投票页面
header('Location: poll.php');
exit();

显示投票结果

创建一个页面显示当前投票结果。

php 实现投票

// 获取投票数据
$pollStmt = $db->prepare("SELECT * FROM polls WHERE id = ?");
$pollStmt->execute([$pollId]);
$poll = $pollStmt->fetch();

// 获取投票选项
$optionsStmt = $db->prepare("SELECT * FROM poll_options WHERE poll_id = ?");
$optionsStmt->execute([$pollId]);
$options = $optionsStmt->fetchAll();

// 计算总票数
$totalVotes = array_sum(array_column($options, 'votes'));

// 显示结果
foreach ($options as $option) {
  $percentage = $totalVotes > 0 ? ($option['votes'] / $totalVotes) * 100 : 0;
  echo '<div>';
  echo htmlspecialchars($option['option_text']) . ': ' . $option['votes'] . ' 票 (' . round($percentage, 2) . '%)';
  echo '</div>';
}

防止重复投票

实现IP限制或Cookie机制防止用户重复投票。

// 使用Cookie防止重复投票
if (isset($_COOKIE['voted_' . $pollId])) {
  die('您已经投过票了');
}

// 处理投票后设置Cookie
setcookie('voted_' . $pollId, '1', time() + 86400); // 24小时有效期

安全考虑

确保投票系统的安全性,防止SQL注入和XSS攻击。

// 使用预处理语句防止SQL注入
$stmt = $db->prepare("INSERT INTO poll_options (poll_id, option_text) VALUES (?, ?)");
$stmt->execute([$pollId, $optionText]);

// 输出时使用htmlspecialchars防止XSS
echo htmlspecialchars($userInput);

以上代码提供了PHP实现投票功能的基本框架,可以根据实际需求进行扩展和完善。

标签: php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或p…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…