You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现数据库球员数据下拉表单及选中内容展示

解决方案

先修复当前的参数错误

你遇到的ArgumentCountError是因为displayST()函数定义要求传入3个参数,但调用时未传任何参数。此外,函数内的SQL语句根本没用到$lastname和$firstname,这两个参数属于冗余代码,直接删除即可。

修复后的单位置选择函数

<?php
require_once("../loginPage/includes/db.inc.php");

function displayST(object $pdo)
{
    $query = "SELECT lastname, firstname FROM icons WHERE position = 'ST';";
    $stmt = $pdo->prepare($query);
    // 无需绑定无用参数,直接执行查询
    $stmt->execute();
    ?>
    <select name="ST">
        <?php while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ?>
            <option value="<?php echo htmlspecialchars($row['firstname'] . ' ' . $row['lastname']); ?>">
                <?php echo htmlspecialchars($row['firstname'] . ' ' . $row['lastname']); ?>
            </option>
        <?php } ?>
    </select>
    <?php
}
?>

正确调用函数

主页面调用时必须传入PDO连接实例:

<?php
// 确保已引入数据库连接文件
require_once("../loginPage/includes/db.inc.php");
displayST($pdo);
?>

重构为通用函数(适配11个位置需求)

为避免每个位置写重复代码,编写通用函数处理任意位置的下拉选择:

<?php
function displayPositionSelect(object $pdo, string $position)
{
    // 使用占位符SQL,避免硬编码位置,提升安全性
    $query = "SELECT lastname, firstname FROM icons WHERE position = :position;";
    $stmt = $pdo->prepare($query);
    $stmt->bindParam(':position', $position);
    $stmt->execute();
    ?>
    <div class="position-select">
        <label><?php echo strtoupper($position); ?>:</label>
        <select name="players[<?php echo $position; ?>]">
            <option value="">请选择球员</option>
            <?php while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
                $playerName = $row['firstname'] . ' ' . $row['lastname'];
            ?>
                <option value="<?php echo htmlspecialchars($playerName); ?>">
                    <?php echo htmlspecialchars($playerName); ?>
                </option>
            <?php } ?>
        </select>
    </div>
    <?php
}
?>

构建完整的11人选择表单

在主页面定义需要的11个位置,循环调用通用函数生成下拉框,统一放在一个表单内:

<?php
require_once("../loginPage/includes/db.inc.php");
// 按需求定义11个位置的顺序和数量
$positions = ['ST', 'ST', 'LW', 'RW', 'CM', 'CM', 'LB', 'CB', 'CB', 'RB', 'GK'];
?>

<form action="playerView.inc.php" method="POST">
    <?php foreach ($positions as $pos) {
        displayPositionSelect($pdo, $pos);
    } ?>
    <button type="submit" name="submit-team">提交阵容</button>
</form>

处理表单提交并展示选中球员

在playerView.inc.php中接收提交的数据,按位置在网格布局中展示:

<?php
session_start();
$selectedPlayers = [];

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit-team'])) {
    $selectedPlayers = $_POST['players'] ?? [];
    // 可选:将选中阵容存入session持久化
    $_SESSION['selected_team'] = $selectedPlayers;
}

// 从session读取之前选中的阵容
if (empty($selectedPlayers) && isset($_SESSION['selected_team'])) {
    $selectedPlayers = $_SESSION['selected_team'];
}
?>

<!-- 网格布局展示,根据你的原型图调整结构 -->
<div class="team-grid">
    <div class="position-gk">
        <h3>GK</h3>
        <p><?php echo $selectedPlayers['GK'] ?? '未选择'; ?></p>
    </div>
    <div class="position-defenders">
        <h3>后卫</h3>
        <p>LB: <?php echo $selectedPlayers['LB'] ?? '未选择'; ?></p>
        <p>CB: <?php echo $selectedPlayers['CB'][0] ?? '未选择'; ?></p>
        <p>CB: <?php echo $selectedPlayers['CB'][1] ?? '未选择'; ?></p>
        <p>RB: <?php echo $selectedPlayers['RB'] ?? '未选择'; ?></p>
    </div>
    <div class="position-midfielders">
        <h3>中场</h3>
        <p>CM: <?php echo $selectedPlayers['CM'][0] ?? '未选择'; ?></p>
        <p>CM: <?php echo $selectedPlayers['CM'][1] ?? '未选择'; ?></p>
    </div>
    <div class="position-forwards">
        <h3>前锋</h3>
        <p>LW: <?php echo $selectedPlayers['LW'] ?? '未选择'; ?></p>
        <p>ST: <?php echo $selectedPlayers['ST'][0] ?? '未选择'; ?></p>
        <p>ST: <?php echo $selectedPlayers['ST'][1] ?? '未选择'; ?></p>
        <p>RW: <?php echo $selectedPlayers['RW'] ?? '未选择'; ?></p>
    </div>
</div>

额外注意事项

  • 使用htmlspecialchars()转义输出内容,防止XSS攻击。
  • 表单采用POST方法,避免提交数据暴露在URL中。
  • 若同一位置需多选球员,可将表单name设为players[ST][],提交后会得到数组形式的多选值。
  • 可添加前端/后端验证,确保用户选择完整的11人阵容。

内容的提问来源于stack exchange,提问作者mclark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:28:19