Ich baue eine dynamische HTML-Tabelle für eine Gaming-Liga. Das Problem, das ich habe, ist, dass die Tabellenspalten nur gezeichnet werden, wenn es für dieses bestimmte Spiel eine Punktzahl gibt. Wenn es keine Punkte gibt, sagen wir zu Beginn eines Turniers, gibt es überhaupt keinen Tisch.Versuchen, eine MYSQL-Abfrage in zwei Teile zu teilen
Ich muss meine Abfrage aufteilen, so dass das Erstellen der Header meiner Tabelle aus meiner Spieleliste passiert unabhängig davon, ob es irgendwelche Punkte gibt oder nicht.
// Write query to retrieve tournament games
$strSQL = "SELECT nfojm_djc2_items.name AS game, nfojm_djc2_items.rom AS rom, nfojm_users.username AS name, submit_score.gamescore AS score, nfojm_comprofiler.avatar AS avatar
FROM nfojm_djc2_items, nfojm_users, submit_score, select_game, nfojm_comprofiler
WHERE submit_score.gameID = select_game.id
AND select_game.gamecatalogID = nfojm_djc2_items.id
AND submit_score.userID = nfojm_users.id
AND submit_score.userID = nfojm_comprofiler.user_id
AND submit_score.tournID = $tournID
ORDER BY submit_score.gamescore DESC";
// Execute the query.
$query = mysqli_query($con, $strSQL);
while ($row = mysqli_fetch_array($query)) {
if (!in_array($row["game"], $games)) {
$i=0;
$indexes[$row["game"]] = 0;
$games[] = $row["game"];
} else {
$indexes[$row["game"]]++;
$i = $indexes[$row["game"]];
}
if (!in_array($row["rom"], $roms)) {
$i=0;
$indexes[$row["rom"]] = 0;
$roms[] = $row["rom"];
} else {
$indexes[$row["rom"]]++;
$i = $indexes[$row["rom"]];
}
$scores[$i][$row["game"]] ="<div style='float:left; margin-right:7px;'><img src='http://www.arcadeicons.com/images/comprofiler/" . $row["avatar"] . "' height='35' width='35' style='border-radius:50%'></div>" . $row["name"] . "<br><h3>" . $row["score"] . "</h3>";
}
// Close the connection
mysqli_close($con);
print ('<table><tr><td><IMG SRC="http://www.arcadeicons.com/images/jem/venues/small/'.$loc_image.'" style="height:86px; margin-right:8px; border-radius:5%"></td>');
print ('<td><p style="text-align: left; margin-bottom:15px;"><h1 style="color:#222222;">'.$tourn_name.'</h1></p>');
print ('<p style="text-align: left;"><h3>'.$venue_name.' , '.$city_name.' , '.$state_name.' , '.$country_name.'</h2></p>');
print ('<p style="text-align: left;"><h3>'.$tourn_date.'</h2></p></td></tr></table>');
// PUT SCORES TO SCREEN
// GAMES
print('<table class="rounded" style="border:2px solid #999999;"><thead><tr>');
foreach ($roms as $rom) {
print("<th class='block'><div style=\"width:130px;height:35px;background-image: url(http://www.arcadeicons.com/media/marquees/{$rom}1.png);background-size:cover;background-position:center center;\"></div></th>");
}
print("</tr></thead><tbody><tr>");
foreach ($games as $game) {
print("<td class='block' style='text-align:center; background-color:#444444; color:white;'><h4>{$game}</h4></td>");
}
print("</tr>");
foreach ($scores as $score) {
print("<tr>");
foreach ($games as $game) {
if (isset($score[$game])){
$ps = $score[$game];
} else {
$ps = "";
}
print("<td style=\"padding-left:8px;\" class=\"block\"><h4>{$ps}</h4></td>");
}
}
print("</tr></tbody></table>");
Die Ergebnisse sehen so aus, wenn Noten angezeigt werden.
picture of table when rendered
Ihr Code ist wahrscheinlich anfällig für [** SQL-Injection-Angriffe **] (https://en.wikipedia.org/wiki/SQL_injection). Sie sollten [** mysqli **] (https://secure.php.net/manual/en/mysqli.prepare.php) oder [** PDO **] (https://secure.php.net/) verwenden. manual/de/pdo.prepared-statements.php) vorbereitete Anweisungen mit gebundenen Parametern wie in [** dieser Beitrag **] beschrieben (https://stackoverflow.com/questions/60174/how-cani-i-prevent-sql -injektion-in-php). –
Schreiben Sie Ihre Abfrage mit JOINS anstelle des von Ihnen verwendeten Formulars neu. Verwenden Sie für die Tabellen, in denen Datensätze möglicherweise fehlen (dh noch kein Ergebnis) LEFT JOINs und für die Spalten aus diesen Tabellen die IFNULL-Funktion, um einen Standardwert (dh 0 oder "keine Bewertung") zurückzugeben. –