当前位置:首页 > PHP

php实现投票

2026-02-27 15:11:14PHP

PHP 实现投票功能

数据库设计

创建投票相关的数据表,通常需要包含投票主题、选项、用户投票记录等。以下是一个简单的表结构示例:

php实现投票

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

CREATE TABLE vote_options (
    id INT AUTO_INCREMENT PRIMARY KEY,
    vote_id INT NOT NULL,
    option_text VARCHAR(255) NOT NULL,
    vote_count INT DEFAULT 0,
    FOREIGN KEY (vote_id) REFERENCES votes(id)
);

CREATE TABLE vote_records (
    id INT AUTO_INCREMENT PRIMARY KEY,
    vote_id INT NOT NULL,
    user_id INT NOT NULL,
    option_id INT NOT NULL,
    voted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (vote_id) REFERENCES votes(id),
    FOREIGN KEY (option_id) REFERENCES vote_options(id)
);

创建投票表单

在 PHP 中创建一个表单,允许用户选择投票选项并提交:

php实现投票

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

处理投票提交

submit_vote.php 中处理用户提交的投票数据:

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['vote_option'])) {
    $option_id = (int)$_POST['vote_option'];
    $user_id = $_SESSION['user_id'] ?? 0; // 假设用户已登录

    // 检查用户是否已投票
    $stmt = $pdo->prepare("SELECT * FROM vote_records WHERE user_id = ? AND vote_id = ?");
    $stmt->execute([$user_id, $vote_id]);
    if ($stmt->rowCount() > 0) {
        die("您已经投过票了");
    }

    // 记录投票并更新选项计数
    $pdo->beginTransaction();
    try {
        $pdo->prepare("INSERT INTO vote_records (vote_id, user_id, option_id) VALUES (?, ?, ?)")
            ->execute([$vote_id, $user_id, $option_id]);
        $pdo->prepare("UPDATE vote_options SET vote_count = vote_count + 1 WHERE id = ?")
            ->execute([$option_id]);
        $pdo->commit();
        echo "投票成功";
    } catch (Exception $e) {
        $pdo->rollBack();
        echo "投票失败: " . $e->getMessage();
    }
}

显示投票结果

创建一个页面显示投票结果:

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

foreach ($options as $option) {
    $percentage = $total_votes > 0 ? ($option['vote_count'] / $total_votes) * 100 : 0;
    echo "<div>
        <strong>{$option['option_text']}</strong>
        <div class='progress-bar' style='width: {$percentage}%'>{$percentage}%</div>
        <span>({$option['vote_count']} 票)</span>
    </div>";
}

安全注意事项

  • 使用预处理语句防止 SQL 注入
  • 对用户输入进行验证和过滤
  • 实施 CSRF 保护
  • 限制每个用户的投票次数
  • 考虑使用验证码防止机器人刷票

扩展功能

  • 添加多选投票功能
  • 实现匿名投票
  • 添加投票截止时间
  • 支持图片选项
  • 添加评论功能

标签: php
分享给朋友:

相关文章

php实现树

php实现树

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

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php变量的实现

php变量的实现

PHP变量的实现机制 PHP变量的实现基于Zend引擎的底层数据结构。核心结构体zval用于存储变量类型和值,其设计允许动态类型转换和高效内存管理。 zval结构体 PHP变量通过zval结构体实现…