当前位置:首页 > 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表单让用户进行投票选择。

<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();

显示投票结果

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

// 获取投票数据
$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攻击。

php 实现投票

// 使用预处理语句防止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 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…