当前位置:首页 > 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表单显示投票选项:

$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;
}

显示投票结果

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

$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);
    });
});

安全性考虑

对输入进行验证和过滤:

php 实现投票

$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实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php数组实现

php数组实现

PHP 数组的基本实现 PHP 数组是一种非常灵活的数据结构,可以存储多个值,并且支持多种类型的键(整数或字符串)。PHP 数组实际上是有序映射(ordered map),可以看作是列表(vector…

php实现文章

php实现文章

PHP实现文章管理功能 在PHP中实现文章管理功能通常涉及数据库操作、表单处理和页面展示。以下是实现文章管理的基本步骤: 数据库设计 创建articles表,包含字段如id、title、conten…