HTML таблица некорректно отображает данные MySQL

#php #html #mysql #sql #html-table

#php #HTML #mysql #sql #html-таблица

Вопрос:

Я запускаю несколько запросов MySQL и основываюсь на таких переменных, как человек, их функция и т.д. она должна выводить данные в виде строк и столбцов в HTML-таблице. Однако при запуске кода получается один большой беспорядок, когда данные не следуют за правильными столбцами. Смотрите изображение ниже для получения дополнительной информации (https://imgur.com/alRkog8). Кажется, я не могу понять, что я делаю не так, поскольку мне кажется, что я правильно разместил все ‘tr’ и ‘td’.Вот как в конечном итоге выглядит таблица HTML на веб-странице

     session_start();
    if(!isset($_SESSION['user1'])){
        header("location:".WEBROOT."index.php");
        exit();
    }
include_once DOCROOT . 'DBconnect.php';
    ?>

<html>
<head>
    <?php
    $title = "Participants";
    $file = __FILE__;
    include DOCROOT . 'pages/menu.php';
    ?>
<div id="content">
<div class="widecontentitem" id="lastitem">
    <?php
    $result = mysqli_query($db_link, 'SELECT institutionID FROM users WHERE users.UserID = '' . $_SESSION['user1'] . ''');
    if (!$result) {
        die('Invalid query: ' . mysqli_error());
    }
    $institutionID = "";
    while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) {
        $institutionID = $row[0];
    }
    print "<input type="hidden" id="institution" value="" . $institutionID . ""> ";
    $result = mysqli_query($db_link, 'SELECT participants.name, participants.surname, participants.email, participants.special, participants.housingcomments, participants.functionID, participants.infix, participants.committee, participants.dateOfBirth, participants.housing, participants.countryID, participants.participantID FROM participants WHERE participants.institutionID =' . $institutionID);
    if (!$result) {
        die('Invalid query:2 ' . mysqli_error());
    }
    print "<table>";
    print "<tr><th><b>Function</b></th><th><b>Name</b></th><th><b>Surname</b></th><th><b>Date Of Birth</b></th><th><b>Country</b></th><th><b>Committee</b></th></tr>";
    while ($row = mysqli_fetch_array($result, MYSQLI_NUM)) {
       if($row[9]==1){
          $row[0] = "(H)" . $row[0];
        }

        if( $row[5]==4){
            $title = "Delegate ";
            $result3 = mysqli_query($db_link, 'SELECT delegation FROM delegations WHERE ambassadorID =' . $row[11] );
            $num_rows = mysqli_num_rows($result3);
            if($num_rows==1){
                $title = "Ambassador ";
            }
            $result2 = mysqli_query($db_link, 'SELECT delegation FROM delegations WHERE delegationID = ' . $row[10] );
            while ($row2 = mysqli_fetch_array($result2, MYSQLI_NUM)) {
                print "<tr><td>$title </td><td>$row[0] </td><td>$row[1] </td><td>$row[8] </td><td>$row2[0] </td><td>$row[7]   </td></tr>";
            }
        }
        if( $row[5]==2){
            print "<tr><td>MUN-Director </td><td>$row[0] </td><td>$row[1] </td><td>$row[8] </td><td></td><td></td></tr>";
        }
        if($row[5]==5){
            print "<tr><td>President </td><td>$row[0] </td><td>$row[1] </td><td>$row[8] </td><td></td><td>$row[7] </td></tr>";
        }
        if($row[5]==6){
            print "<tr><td>Deputy President </td><td>$row[0] </td><td>$row[1] </td><td>$row[8] </td><td></td><td>$row[7]  </td></tr>";
        }
        if($row[5]==7){
            print "<tr><td>Chair </td><td>$row[0] </td><td>$row[1] </td><td>$row[8] </td><td></td><td>$row[7] </td></tr>";
        }
        if($row[5]==8){
            print "<tr><td>Deputy Chair </td><td>$row[0] </td><td>$row[1] </td><td>$row[8] </td><td></td><td>$row[7] </td></tr>";
        }
        if($row[4]!=NULL || $row[3]!=NULL){
            print "<table>";
            if($row[3]!=NULL){
                print "<tr><td colspan="6">Comments: </td><td>$row[3] </td></tr>";
            }
            if($row[4]!=NULL){
                print "<tr><td colspan="6">Housing: </td><td>$row[4] </td></tr>";
            }
            print "</table>";
        }
    }
    print "</table>";
    ?>
</div>
<?php include '../footer.php';?>
</div>
</body>
</html>
  

Ответ №1:

По крайней мере, одна проблема, вероятно, связана с вложенными элементами <table> отсюда:

 if($row[4]!=NULL || $row[3]!=NULL){
            print "<table>";
            if($row[3]!=NULL){
  

Из документа элемента таблицы MDN:

Разрешенное содержимое в этом порядке:

  • необязательный <caption> элемент,
  • ноль или более <colgroup> элементов,
  • необязательный <thead> элемент,
  • либо одно из следующих:
    • ноль или более <tbody> элементов
    • один или несколько <tr> элементов
  • необязательный <tfoot> элемент

Возможно, вы захотите использовать что-то вроде Nu Html для проверки HTML. Один из способов ее использования —

  • щелкните правой кнопкой мыши страницу и выберите «Просмотреть источник страницы» или аналогичный, в зависимости от вашего браузера
  • выберите все и скопируйте
  • Выберите Проверить с помощью: text input в валидаторе
  • вставьте исходный код страницы и нажмите проверить

Комментарии:

1. Удаление дополнительных тегов <table> действительно решило мою проблему. Nu Html тоже указал мне на это. Спасибо за вашу помощь и быстрый ответ!