当前位置:首页 > PHP

php 实现投票功能

2026-02-15 06:18:54PHP

实现投票功能的基本步骤

数据库设计
创建数据表存储投票选项和投票记录。常见的表结构包括:

  • polls 表:存储投票主题(id, title, description, created_at
  • poll_options 表:存储选项(id, poll_id, option_text, vote_count
  • poll_votes 表:记录用户投票(id, poll_id, option_id, user_id, voted_at

SQL 示例

php 实现投票功能

CREATE TABLE polls (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE poll_options (
    id INT AUTO_INCREMENT PRIMARY KEY,
    poll_id INT NOT NULL,
    option_text VARCHAR(255) NOT NULL,
    vote_count INT DEFAULT 0,
    FOREIGN KEY (poll_id) REFERENCES polls(id)
);

CREATE TABLE poll_votes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    poll_id INT NOT NULL,
    option_id INT NOT NULL,
    user_id INT,
    voted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (poll_id) REFERENCES polls(id),
    FOREIGN KEY (option_id) REFERENCES poll_options(id)
);

前端表单提交

创建投票表单,用户可选择选项并提交:

php 实现投票功能

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

后端处理逻辑

vote.php 中处理投票请求:

<?php
session_start();
require 'db_connection.php'; // 数据库连接文件

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['option_id'])) {
    $option_id = intval($_POST['option_id']);
    $user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null;

    // 检查用户是否已投票(如需限制)
    if ($user_id) {
        $stmt = $pdo->prepare("SELECT id FROM poll_votes WHERE poll_id = (SELECT poll_id FROM poll_options WHERE id = ?) AND user_id = ?");
        $stmt->execute([$option_id, $user_id]);
        if ($stmt->fetch()) {
            die("您已参与过本次投票");
        }
    }

    // 更新投票数
    $pdo->beginTransaction();
    try {
        $pdo->prepare("UPDATE poll_options SET vote_count = vote_count + 1 WHERE id = ?")->execute([$option_id]);
        $pdo->prepare("INSERT INTO poll_votes (poll_id, option_id, user_id) VALUES ((SELECT poll_id FROM poll_options WHERE id = ?), ?, ?)")
            ->execute([$option_id, $option_id, $user_id]);
        $pdo->commit();
        header("Location: results.php?poll_id=" . $pdo->lastInsertId());
    } catch (Exception $e) {
        $pdo->rollBack();
        die("投票失败: " . $e->getMessage());
    }
}
?>

结果显示页面

results.php 中展示投票结果:

<?php
$poll_id = intval($_GET['poll_id']);
$stmt = $pdo->prepare("SELECT title FROM polls WHERE id = ?");
$stmt->execute([$poll_id]);
$poll = $stmt->fetch();

$options = $pdo->query("SELECT option_text, vote_count FROM poll_options WHERE poll_id = $poll_id")->fetchAll();
$total_votes = array_sum(array_column($options, 'vote_count'));
?>

<h3><?php echo htmlspecialchars($poll['title']); ?></h3>
<ul>
    <?php foreach ($options as $option): ?>
        <li>
            <?php echo htmlspecialchars($option['option_text']); ?>:
            <?php echo $option['vote_count']; ?> 票
            (<?php echo $total_votes > 0 ? round($option['vote_count'] / $total_votes * 100, 2) : 0; ?>%)
        </li>
    <?php endforeach; ?>
</ul>

安全注意事项

  • 使用 htmlspecialchars() 防止 XSS 攻击
  • 通过 intval() 或参数化查询防止 SQL 注入
  • 对用户身份进行验证(如需要登录投票)
  • 使用事务确保数据一致性

扩展功能建议

  • 添加 IP 限制或 Cookie 验证防止刷票
  • 实现多选投票(需修改表单和数据处理逻辑)
  • 增加图表可视化(如使用 Chart.js)
  • 设置投票截止时间(在 polls 表中添加 end_time 字段)

标签: 功能php
分享给朋友:

相关文章

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过…

vue实现产品使用功能

vue实现产品使用功能

Vue 实现产品功能的关键方法 组件化开发 Vue 的核心思想是组件化,将产品功能拆分为独立可复用的组件。每个组件包含模板、逻辑和样式,例如产品卡片组件可封装图片、名称、价格等元素。通过 props…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 使用window.print()方法 Vue中可以直接调用浏览器的window.print()方法实现打印功能。这种方法简单快捷,适用于打印整个页面或特定区域。 meth…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isse…