当前位置:首页 > PHP

php实现星级评分

2026-02-16 18:16:34PHP

PHP实现星级评分

数据库设计

创建一个包含评分数据的数据库表,例如ratings,包含字段iditem_iduser_idratingtimestampitem_id表示被评分的项目,user_id表示评分用户,rating存储1-5的星级值。

CREATE TABLE ratings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    item_id INT NOT NULL,
    user_id INT NOT NULL,
    rating TINYINT NOT NULL,
    timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

前端显示星级

使用HTML和CSS创建星级评分界面。通过单选按钮或点击事件捕获用户选择的星级。

<div class="star-rating">
    <input type="radio" id="star5" name="rating" value="5" />
    <label for="star5" title="5 stars">★</label>
    <input type="radio" id="star4" name="rating" value="4" />
    <label for="star4" title="4 stars">★</label>
    <input type="radio" id="star3" name="rating" value="3" />
    <label for="star3" title="3 stars">★</label>
    <input type="radio" id="star2" name="rating" value="2" />
    <label for="star2" title="2 stars">★</label>
    <input type="radio" id="star1" name="rating" value="1" />
    <label for="star1" title="1 star">★</label>
</div>

CSS样式

为星级评分添加样式,使其在悬停和选中时有视觉反馈。

.star-rating {
    direction: rtl;
    unicode-bidi: bidi-override;
    display: inline-block;
}
.star-rating input {
    display: none;
}
.star-rating label {
    color: #ddd;
    font-size: 30px;
    cursor: pointer;
}
.star-rating input:checked ~ label,
.star-rating label:hover,
.star-rating label:hover ~ label {
    color: #ffcc00;
}

PHP处理评分

创建一个PHP脚本接收前端提交的评分数据,并将其存入数据库。同时验证用户是否已评分,避免重复提交。

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $item_id = $_POST['item_id'];
    $user_id = $_POST['user_id'];
    $rating = $_POST['rating'];

    // 验证数据
    if (!is_numeric($item_id) || !is_numeric($user_id) || !is_numeric($rating)) {
        die('Invalid data');
    }

    // 检查用户是否已评分
    $pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
    $stmt = $pdo->prepare('SELECT id FROM ratings WHERE item_id = ? AND user_id = ?');
    $stmt->execute([$item_id, $user_id]);

    if ($stmt->rowCount() > 0) {
        die('You have already rated this item');
    }

    // 插入新评分
    $stmt = $pdo->prepare('INSERT INTO ratings (item_id, user_id, rating) VALUES (?, ?, ?)');
    $stmt->execute([$item_id, $user_id, $rating]);

    echo 'Rating submitted successfully';
}
?>

计算平均评分

从数据库获取所有评分并计算平均分,用于显示项目的总体评分。

<?php
function getAverageRating($item_id) {
    $pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
    $stmt = $pdo->prepare('SELECT AVG(rating) as avg_rating FROM ratings WHERE item_id = ?');
    $stmt->execute([$item_id]);
    $result = $stmt->fetch();

    return round($result['avg_rating'], 1);
}

$average_rating = getAverageRating($item_id);
echo "Average Rating: " . $average_rating;
?>

显示平均星级

根据计算出的平均分,在前端显示相应的星级。

<?php
function displayStars($average) {
    $full_stars = floor($average);
    $half_star = ($average - $full_stars) >= 0.5 ? 1 : 0;
    $empty_stars = 5 - $full_stars - $half_star;

    for ($i = 0; $i < $full_stars; $i++) {
        echo '★';
    }
    if ($half_star) {
        echo '½';
    }
    for ($i = 0; $i < $empty_stars; $i++) {
        echo '☆';
    }
}

displayStars($average_rating);
?>

防止重复提交

在用户提交评分后,禁用评分按钮或显示已评分状态,避免用户多次提交。

php实现星级评分

document.querySelectorAll('.star-rating input').forEach(input => {
    input.addEventListener('change', function() {
        // 禁用所有星级选项
        document.querySelectorAll('.star-rating input').forEach(i => {
            i.disabled = true;
        });
        // 提交表单
        document.getElementById('rating-form').submit();
    });
});

标签: 星级评分
分享给朋友:

相关文章

vue 实现评分

vue 实现评分

实现评分功能的方法 在Vue中实现评分功能可以通过多种方式完成,以下是几种常见的实现方法: 使用第三方库 使用现成的评分组件库可以快速实现评分功能,例如vue-star-rating或rate-it…

react实现星级评分

react实现星级评分

实现星级评分的基本思路 使用React实现星级评分通常涉及状态管理、事件处理和动态渲染。核心逻辑包括跟踪当前评分和悬停状态,通过图标或文字展示星级。 使用状态管理评分 创建组件并初始化状态,存储当前…

js 实现评分

js 实现评分

实现评分功能(五星评分) 在JavaScript中实现五星评分功能,可以通过HTML、CSS和JavaScript结合完成。以下是一个常见的实现方式: HTML部分 <div class="…

vue实现评分

vue实现评分

实现评分功能的步骤 在Vue中实现评分功能可以通过多种方式完成,以下是一种常见的实现方法: 创建评分组件 使用v-for循环生成评分星星,并通过v-model绑定评分值: <templat…

php实现评分功能

php实现评分功能

数据库设计 创建数据库表存储评分数据,表结构可包含字段:id(主键)、item_id(被评分项ID)、user_id(用户ID)、score(分数)、created_at(评分时间)。示例SQL:…

vue滑动评分实现

vue滑动评分实现

实现滑动评分功能 在Vue中实现滑动评分功能可以通过自定义组件结合触摸或鼠标事件完成。以下是两种常见实现方式: 基于自定义滑块组件 创建一个可拖动的评分滑块,利用v-model实现双向绑定:…