当前位置:首页 > 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);
?>

防止重复提交

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

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

php实现星级评分

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

相关文章

vue 实现星星评分

vue 实现星星评分

vue 实现星星评分的方法 使用组件化方式实现 创建一个独立的评分组件,通过v-for循环生成星星图标,利用v-model或props实现数据双向绑定。 <template> &l…

vue 实现星级评价

vue 实现星级评价

实现星级评价的步骤 使用组件实现星级评价 在Vue中,可以通过创建一个星级评价组件来实现。该组件允许用户点击星星进行评分,并显示当前评分。 <template> <div cl…

vue实现批量select评分

vue实现批量select评分

Vue 实现批量 Select 评分 在 Vue 中实现批量 Select 评分功能,可以通过动态生成评分选项并结合 v-model 实现数据绑定。以下是一个完整的实现示例: 基础实现 创建…

vue实现星星评分原理

vue实现星星评分原理

实现星星评分的基本原理 星星评分通常通过显示一组星星图标,允许用户点击或悬停来选择评分值。Vue 的响应式特性使得实现这一功能变得简单,核心逻辑包括数据绑定、事件处理和动态样式控制。 数据绑定与渲…

react实现星星评分

react实现星星评分

实现星星评分组件 使用React实现一个可交互的星星评分组件,可以通过状态管理用户选择的评分值。 import React, { useState } from 'react'; const St…

react实现评分功能

react实现评分功能

实现评分功能的方法 在React中实现评分功能可以通过多种方式完成,以下是一些常见的实现方法。 使用第三方库 使用现成的评分组件库可以快速实现功能,例如react-rating或react-sta…