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

如何用foreach循环结合Steam API与MySQL生成多SteamID的HTML表格?

解决MySQL多SteamID遍历并生成HTML表格的问题

我来帮你搞定这个问题~原代码只能处理单个SteamID,主要是两个原因:一是你只用fetch_assoc()取了查询结果的第一行,二是Steam API的调用逻辑没放在循环里。下面是修改后的完整代码,包含遍历所有数据库记录、调用Steam API获取信息,以及生成HTML表格的完整逻辑:

核心修改点

  • 改用循环遍历数据库查询的所有结果行
  • 将Steam API调用嵌入循环,为每个SteamID单独请求数据
  • 逐步构建HTML表格的表头和内容行
  • 增加基础错误处理,避免API返回空数据时出现报错

完整代码示例

/* * Accountlist Query - 获取所有Steam记录 */ 
$listResult = $db->query('SELECT * FROM steamlist ORDER BY id DESC'); 

/* * 初始化HTML表格 */
$htmlTable = '<table border="1" cellpadding="8" cellspacing="0">';
// 添加表头
$htmlTable .= '<tr>
    <th>论坛用户名</th>
    <th>Steam用户名</th>
    <th>SteamID64</th>
    <th>最后离线时间</th>
    <th>在线状态</th>
</tr>';

/* * 遍历所有数据库记录 */
while ($row = $listResult->fetch_assoc()) {
    $steamid = $row['steamid64']; 
    $xfUsername = $row['xenforo_username']; 
    $xfUserid = $row['xenforo_userid']; 

    /* * 调用Steam API获取玩家信息 */
    $apiResponse = file_get_contents("https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key=$api_key&format=json&steamids=$steamid"); 
    $apiData = json_decode($apiResponse); 

    // 初始化默认值,避免API返回空数据时报错
    $steamUsername = '未获取到';
    $lastLogoff = '未知';
    $onlineStatus = '未知';

    // 检查API是否返回了有效玩家数据
    if (!empty($apiData->response->players) && isset($apiData->response->players[0])) {
        $steamapi = $apiData->response->players[0];
        $steamUsername = htmlspecialchars($steamapi->personaname);
        // 转换时间戳为可读格式
        $lastLogoff = date('Y-m-d H:i:s', $steamapi->lastlogoff);
        // 转换在线状态为文字描述
        $statusMap = [
            0 => '离线',
            1 => '在线',
            2 => '忙碌',
            3 => '离开',
            4 => '睡觉',
            5 => '想交易',
            6 => '想玩游戏'
        ];
        $onlineStatus = $statusMap[$steamapi->personastate] ?? '未知';
    }

    /* * 向HTML表格添加一行数据 */
    $htmlTable .= "<tr>
        <td>$xfUsername</td>
        <td>$steamUsername</td>
        <td>$steamid</td>
        <td>$lastLogoff</td>
        <td>$onlineStatus</td>
    </tr>";
}

/* * 结束表格标签 */
$htmlTable .= '</table>';

// 输出最终的HTML表格
echo $htmlTable;

额外优化建议

  • 批量API请求:Steam API支持一次传入多个SteamID(用逗号分隔),可以把所有SteamID先收集起来,只调用一次API,这样能减少请求次数,提升效率。
  • 缓存API结果:Steam玩家信息不会频繁变动,可以把API返回的数据缓存到数据库或者文件中,避免重复请求。
  • 安全处理:用htmlspecialchars()转义输出内容,防止XSS攻击,上面的代码已经做了这一步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:55:26