当前位置:首页 > PHP

php实现投票

2026-02-27 15:11:14PHP

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 中创建一个表单,允许用户选择投票选项并提交:

<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 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/t…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进…

php实现mvc

php实现mvc

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

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 paren…