本文目录导读:

我理解你想要了解PHP项目中如何显示“背身拿球成功率”这一数据,由于我是一个AI助手,我无法直接查看你本地的项目文件,但我可以为你提供实现思路和示例代码。
实现背身拿球成功率的显示
数据库设计(假设)
-- 球员背身拿球数据表
CREATE TABLE player_back_to_goal_stats (
id INT PRIMARY KEY AUTO_INCREMENT,
player_id INT NOT NULL,
match_id INT NOT NULL,
back_to_goal_attempts INT DEFAULT 0, -- 背身拿球次数
back_to_goal_success INT DEFAULT 0, -- 成功次数
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (player_id) REFERENCES players(id),
FOREIGN KEY (match_id) REFERENCES matches(id)
);
PHP后端代码
<?php
// 获取球员背身拿球成功率
function getBackToGoalSuccessRate($playerId, $connection) {
$query = "SELECT
SUM(back_to_goal_attempts) AS total_attempts,
SUM(back_to_goal_success) AS total_success
FROM player_back_to_goal_stats
WHERE player_id = ?";
$stmt = $connection->prepare($query);
$stmt->bind_param("i", $playerId);
$stmt->execute();
$result = $stmt->get_result();
$data = $result->fetch_assoc();
$attempts = $data['total_attempts'] ?? 0;
$success = $data['total_success'] ?? 0;
// 计算成功率
$successRate = ($attempts > 0) ? round(($success / $attempts) * 100, 1) : 0;
return [
'attempts' => $attempts,
'success' => $success,
'success_rate' => $successRate
];
}
// 连接数据库
$connection = new mysqli('localhost', 'username', 'password', 'database_name');
// 获取球员ID(示例)
$playerId = isset($_GET['player_id']) ? intval($_GET['player_id']) : 1;
$stats = getBackToGoalSuccessRate($playerId, $connection);
?>
HTML显示部分
<!-- 球员背身拿球成功率展示 -->
<div class="stat-card">
<h3>背身拿球成功率</h3>
<?php if ($stats['attempts'] > 0): ?>
<div class="stat-value">
<span class="percentage"><?php echo $stats['success_rate']; ?>%</span>
</div>
<div class="stat-details">
<p>成功: <?php echo $stats['success']; ?> 次</p>
<p>总尝试: <?php echo $stats['attempts']; ?> 次</p>
</div>
<!-- 进度条显示 -->
<div class="progress-bar">
<div class="progress" style="width: <?php echo $stats['success_rate']; ?>%"></div>
</div>
<?php else: ?>
<p class="no-data">暂无数据</p>
<?php endif; ?>
</div>
<style>
.stat-card {
background: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.stat-value {
font-size: 2em;
font-weight: bold;
color: #333;
}
.progress-bar {
background: #eee;
height: 20px;
border-radius: 10px;
margin-top: 10px;
}
.progress {
background: #4CAF50;
height: 100%;
border-radius: 10px;
transition: width 0.5s ease;
}
</style>
图表展示(使用Chart.js)
<?php
// 获取多场数据展示趋势
$query = "SELECT
match_date,
SUM(back_to_goal_attempts) as attempts,
SUM(back_to_goal_success) as success
FROM player_back_to_goal_stats
JOIN matches ON player_back_to_goal_stats.match_id = matches.id
WHERE player_id = ?
GROUP BY match_date
ORDER BY match_date DESC
LIMIT 10";
$stmt = $connection->prepare($query);
$stmt->bind_param("i", $playerId);
$stmt->execute();
$result = $stmt->get_result();
$chartData = [];
while ($row = $result->fetch_assoc()) {
$rate = $row['attempts'] > 0 ?
round(($row['success'] / $row['attempts']) * 100, 1) : 0;
$chartData[] = [
'date' => $row['match_date'],
'rate' => $rate
];
}
?>
<!-- 趋势图 -->
<canvas id="trendChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('trendChart');
const chartData = <?php echo json_encode($chartData); ?>;
new Chart(ctx, {
type: 'line',
data: {
labels: chartData.map(d => d.date),
datasets: [{
label: '背身拿球成功率',
data: chartData.map(d => d.rate),
borderColor: 'rgb(75, 192, 192)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
tension: 0.1
}]
},
options: {
scales: {
y: {
beginAtZero: true,
max: 100,
ticks: {
callback: (value) => value + '%'
}
}
}
}
});
</script>
数据输入接口
<?php
// 记录背身拿球数据
function recordBackToGoalStats($playerId, $matchId, $success, $attempts, $connection) {
$query = "INSERT INTO player_back_to_goal_stats
(player_id, match_id, back_to_goal_attempts, back_to_goal_success)
VALUES (?, ?, ?, ?)";
$stmt = $connection->prepare($query);
$stmt->bind_param("iiii", $playerId, $matchId, $attempts, $success);
return $stmt->execute();
}
?>
如果项目已有数据结构
如果你的项目已经有不同的数据结构,请告诉我:
- 数据库结构 - 相关的表名和字段
- 现有代码 - 你是如何获取球员数据的
- 展示需求 - 需要显示在哪个页面(球员列表、球员详情等)
我可以帮你调整代码来适配你的项目结构,你能否分享一些项目文件的相关信息?