如何用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
相关产品推荐
相关产品推荐

