为什么我的php脚本没有显示mysql中的所有数据?
我有一个php脚本,可以更改特定用户的TeamSpeak组。 为了获得一点视觉效果,我添加了一个表,这样我可以看到用户应该获得哪些组 我的整个php脚本:为什么我的php脚本没有显示mysql中的所有数据?,php,mysql,Php,Mysql,我有一个php脚本,可以更改特定用户的TeamSpeak组。 为了获得一点视觉效果,我添加了一个表,这样我可以看到用户应该获得哪些组 我的整个php脚本: <?php date_default_timezone_set("Europe/Berlin"); require ("config.php"); require ("groups.php"); include ("datenbank.php"); require_once("libraries/TeamSpeak3/TeamSpe
<?php
date_default_timezone_set("Europe/Berlin");
require ("config.php");
require ("groups.php");
include ("datenbank.php");
require_once("libraries/TeamSpeak3/TeamSpeak3.php");
$ts3_VirtualServer = TeamSpeak3::factory("serverquery://" . $cfg["user"] . ":" . $cfg["pass"] . "@" . $cfg["host"] . ":" . $cfg["query"] . "/?server_port=9987");
$user_check_confirmed = "SELECT * FROM Users WHERE TSUUIDconfirmed = '1'";
$result = mysqli_query($db, $user_check_confirmed);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
if($row['MainSteamGroup'] == '1' || $row['vip'] == '1'){
echo '<table border="1">';
echo '<thead>';
echo '<tr class="table-head">';
echo '<th class="column1">Username</th>';
echo '<th class="column2">Rocket League</th>';
echo '<th class="column3">CS:GO</th>';
echo '<th class="column1">FACEIT</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
while($fetch = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo '<td class="column1">' . $fetch['Username'] . '</td>';
echo '<td class="column2">' . $fetch['RLHighestRank'] . '</td>';
echo '<td class="column3">' . $fetch['CSGOMM'] . '</td>';
echo '<td class="column1">' . $fetch['FACEITLVL'] . '</td>';
echo "</tr>";
}
echo '</tbody>';
echo '</table>';
echo '<br><br><br>';
// Rocket League
if($row['RLHighestRank'] == 'none'){
} else {
if($row) {
if($row['RLHighestRank'] == $row['RLHighestRankSet']){
}
}
if($row) {
if($row['RLHighestRank'] !== $row['RLHighestRankSet'] && $row['RLHighestRankSet'] !== '0' && strpos($row['activeranks'], 'Rocket League') !== false){
try {
$client = $ts3_VirtualServer->clientFindDb($row['TeamSpeakUUID'], true);
if( $ts3_VirtualServer->serverGroupClientDel($rl[$row['RLHighestRankSet']], $client[0]));
if( $ts3_VirtualServer->serverGroupClientAdd($rl[$row['RLHighestRank']], $client[0]));
$sql = "UPDATE Users SET RLHighestRankSet='".$row['RLHighestRank']."' WHERE TeamSpeakUUID='".$row['TeamSpeakUUID']."'";
if ($db->query($sql) === TRUE) { }
} catch(Exception $e) {
echo "<br>" . $row['Username'] . " Fehler!<br/>ErrorID: <b>". $e->getCode() ."</b>; [RocketLeague1] Error Message: <b>". $e->getMessage() ."</b><br>;";
}
}
}
if($row) {
if($row['RLHighestRankSet'] == '0' && strpos($row['activeranks'], 'Rocket League') !== false ){
try {
$client = $ts3_VirtualServer->clientFindDb($row['TeamSpeakUUID'], true);
if( $ts3_VirtualServer->serverGroupClientAdd($rl[$row['RLHighestRank']], $client[0]));
$sql = "UPDATE Users SET RLHighestRankSet='".$row['RLHighestRank']."' WHERE TeamSpeakUUID='".$row['TeamSpeakUUID']."'";
if ($db->query($sql) === TRUE) { }
} catch(Exception $e) {
echo "<br>" . $row['Username'] . " Fehler!<br/>ErrorID: <b>". $e->getCode() ."</b>; [RocketLeague2] Error Message: <b>". $e->getMessage() ."</b><br>;";
}
}
}
}
}
}
为了进行测试,我将数据库中的每个用户都设置为vip。总的来说,我有8个用户,所以所有的用户都应该得到他们的排名
如果我现在打开php站点,我会在den表中看到4个用户,其他用户正在更新排名,那么为什么我的脚本不能正常工作呢?
我的意思是,每个用户都喜欢相同的数据库条目,唯一不同的是名称和等级…这里的结构有点难以理解。你能展示一些示例数据吗 您有一个重复的while循环,这可能会导致问题。我做了一点清理工作,可能值得一试:
<?php
date_default_timezone_set("Europe/Berlin");
require("config.php");
require("groups.php");
include("datenbank.php");
require_once("libraries/TeamSpeak3/TeamSpeak3.php");
$ts3_VirtualServer = TeamSpeak3::factory("serverquery://" . $cfg["user"] . ":" . $cfg["pass"] . "@" . $cfg["host"] . ":" . $cfg["query"] . "/?server_port=9987");
$user_check_confirmed = "SELECT * FROM Users WHERE TSUUIDconfirmed = '1'";
$result = mysqli_query($db, $user_check_confirmed);
if (mysqli_num_rows($result) > 0) {
echo '<table border="1">';
echo '<thead>';
echo '<tr class="table-head">';
echo '<th class="column1">Username</th>';
echo '<th class="column2">Rocket League</th>';
echo '<th class="column3">CS:GO</th>';
echo '<th class="column1">FACEIT</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo '<td class="column1">' . $fetch['Username'] . '</td>';
echo '<td class="column2">' . $fetch['RLHighestRank'] . '</td>';
echo '<td class="column3">' . $fetch['CSGOMM'] . '</td>';
echo '<td class="column1">' . $fetch['FACEITLVL'] . '</td>';
echo "</tr>";
}
echo '</tbody>';
echo '</table>';
echo '<br><br><br>';
// Rocket League
if (isset($row['RLHighestRank']) && $row['RLHighestRank'] != 'none') {
if ($row['RLHighestRank'] !== $row['RLHighestRankSet'] && $row['RLHighestRankSet'] !== '0' && strpos($row['activeranks'], 'Rocket League') !== false) {
try {
$client = $ts3_VirtualServer->clientFindDb($row['TeamSpeakUUID'], true);
if ($ts3_VirtualServer->serverGroupClientDel($rl[$row['RLHighestRankSet']], $client[0])) ;
if ($ts3_VirtualServer->serverGroupClientAdd($rl[$row['RLHighestRank']], $client[0])) ;
$sql = "UPDATE Users SET RLHighestRankSet='" . $row['RLHighestRank'] . "' WHERE TeamSpeakUUID='" . $row['TeamSpeakUUID'] . "'";
if ($db->query($sql) === true) {
}
}
catch (Exception $e) {
echo "<br>" . $row['Username'] . " Fehler!<br/>ErrorID: <b>" . $e->getCode() . "</b>; [RocketLeague1] Error Message: <b>" . $e->getMessage() . "</b><br>;";
}
}
if ($row['RLHighestRankSet'] == '0' && strpos($row['activeranks'], 'Rocket League') !== false) {
try {
$client = $ts3_VirtualServer->clientFindDb($row['TeamSpeakUUID'], true);
if ($ts3_VirtualServer->serverGroupClientAdd($rl[$row['RLHighestRank']], $client[0])) ;
$sql = "UPDATE Users SET RLHighestRankSet='" . $row['RLHighestRank'] . "' WHERE TeamSpeakUUID='" . $row['TeamSpeakUUID'] . "'";
if ($db->query($sql) === true) {
}
}
catch (Exception $e) {
echo "<br>" . $row['Username'] . " Fehler!<br/>ErrorID: <b>" . $e->getCode() . "</b>; [RocketLeague2] Error Message: <b>" . $e->getMessage() . "</b><br>;";
}
}
}
}
查看附带的数据以及删除的任何敏感内容将有助于进一步解决问题。请在代码中添加错误管理。因此,您可以看到问题所在。通过获取第一行并仅输出一个表头,您将丢失至少一个结果集行。错误步骤1从phpMyAdmin中TsuidConfiged='1'的用户处运行SELECT*,并查看返回了多少行var_dumpmysqli_num_rows$result给出了什么?你可以接受SQL注入,参数化你的查询。为什么所有的无意义的代码像if$db->query$SQL===TRUE{}和if$row['RLHighestRank']='none'{}呢{我想我现在设法让它工作了,因为我现在只有一个while$row…函数。这看起来很复杂,因为我不了解TeamSpeak php框架。因此,如果用户在['RLHighestRank']中的排名与他在TeamSpeak['RLHighestRankSet']中的排名不同,然后它应该将其更改为RLHighestRank,并将RLHighestRankSet设置为他现在在TeamSpeak上获得的实际级别。很难理解,但我找到了最简单的解决方案
if ($row['RLHighestRank'] !== $row['RLHighestRankSet'] && $row['RLHighestRankSet'] !== '0' && strpos($row['activeranks'], 'Rocket League') !== false) {