当前位置:首页 > PHP

php 实现投票

2026-01-29 23:18:18PHP

PHP 实现投票功能

数据库设计

创建一个数据库表存储投票数据,例如:

CREATE TABLE votes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    option_name VARCHAR(255) NOT NULL,
    vote_count INT DEFAULT 0
);

插入投票选项

初始化投票选项到数据库:

$options = ['Option 1', 'Option 2', 'Option 3'];
foreach ($options as $option) {
    $stmt = $pdo->prepare("INSERT INTO votes (option_name) VALUES (?)");
    $stmt->execute([$option]);
}

显示投票界面

创建HTML表单显示投票选项:

php 实现投票

$stmt = $pdo->query("SELECT * FROM votes");
while ($row = $stmt->fetch()) {
    echo "<form method='post'>";
    echo "<input type='hidden' name='option_id' value='{$row['id']}'>";
    echo "<button type='submit'>{$row['option_name']}</button>";
    echo "</form>";
}

处理投票提交

接收并处理投票请求:

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['option_id'])) {
    $optionId = (int)$_POST['option_id'];
    $stmt = $pdo->prepare("UPDATE votes SET vote_count = vote_count + 1 WHERE id = ?");
    $stmt->execute([$optionId]);
    header("Location: ".$_SERVER['PHP_SELF']);
    exit;
}

显示投票结果

查询并显示当前投票结果:

php 实现投票

$stmt = $pdo->query("SELECT * FROM votes ORDER BY vote_count DESC");
echo "<h3>投票结果</h3>";
while ($row = $stmt->fetch()) {
    echo "<p>{$row['option_name']}: {$row['vote_count']}票</p>";
}

防止重复投票

使用会话防止同一用户重复投票:

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_SESSION['voted'])) {
        echo "您已经投过票了";
    } else {
        $_SESSION['voted'] = true;
        // 处理投票逻辑
    }
}

使用AJAX无刷新投票

使用jQuery实现无刷新投票:

$('.vote-btn').click(function() {
    var optionId = $(this).data('id');
    $.post('vote.php', {option_id: optionId}, function(data) {
        $('#results').html(data);
    });
});

安全性考虑

对输入进行验证和过滤:

$optionId = filter_input(INPUT_POST, 'option_id', FILTER_VALIDATE_INT);
if ($optionId === false || $optionId === null) {
    die("无效的投票选项");
}

完整示例代码

<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['option_id'])) {
    $optionId = filter_input(INPUT_POST, 'option_id', FILTER_VALIDATE_INT);
    if ($optionId && !isset($_SESSION['voted'])) {
        $_SESSION['voted'] = true;
        $stmt = $pdo->prepare("UPDATE votes SET vote_count = vote_count + 1 WHERE id = ?");
        $stmt->execute([$optionId]);
    }
}

$stmt = $pdo->query("SELECT * FROM votes");
?>
<!DOCTYPE html>
<html>
<body>
    <?php while ($row = $stmt->fetch()): ?>
        <form method="post">
            <input type="hidden" name="option_id" value="<?= $row['id'] ?>">
            <button type="submit"><?= htmlspecialchars($row['option_name']) ?></button>
        </form>
    <?php endwhile; ?>

    <h3>投票结果</h3>
    <?php 
    $result = $pdo->query("SELECT * FROM votes ORDER BY vote_count DESC");
    while ($row = $result->fetch()): ?>
        <p><?= htmlspecialchars($row['option_name']) ?>: <?= $row['vote_count'] ?>票</p>
    <?php endwhile; ?>
</body>
</html>

标签: php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php实现抽奖程序

php实现抽奖程序

PHP实现抽奖程序 基本抽奖逻辑 创建一个简单的抽奖程序需要定义奖品、中奖概率及随机选择逻辑。以下是一个基础实现示例: <?php // 奖品配置(奖品名称 => 概率) $prizes…

php实现下载功能

php实现下载功能

PHP实现文件下载功能 使用PHP实现文件下载功能可以通过设置HTTP头信息控制浏览器行为,以下是几种常见实现方式: 基础下载方法 $file_path = '/path/to/file.pdf';…

php实现无限级分类

php实现无限级分类

无限级分类的实现方法 无限级分类通常用于构建树形结构数据,如商品分类、地区选择等。以下是几种常见的实现方式: 递归实现法 递归是最直观的实现方式,通过函数自身调用来处理子分类: function…