Установка php сгенерированной HTML-таблицы по частям рядом

0

Я сделал этот код для извлечения данных из mysql и вывода результатов на странице. Результаты, сгенерированные кодом, сбрасываются на страницу. Я бы хотел, чтобы они были установлены бок о бок, может быть 30 строк, а затем следующие 30 строк. (После 3 столбцов таблицы, если есть еще больше данных, они идут, как это возможно, на странице, если это возможно). Я нашел подобное сообщение об этом, но поскольку я новичок в этом, я не мог применить предлагаемое решение к моему коду. Любая помощь будет принята с благодарностью. Спасибо!

Простая иллюстрация, чтобы показать необходимое мне решение:

Изображение 174551

<table class="result-table">
 <tr>
  <th>Week</th> 
  <th>Ball1</th> 
  <th>Ball2</th>
  <th>Ball3</th>
  <th>Ball4</th>
  <th>Ball5</th>
  <th>Ball6</th>
 </tr>


 <?php
$conn = mysqli_connect("localhost", "root", "", "db");
  // Check connection
  if ($conn->connect_error) {
   die("Connection failed: " . $conn->connect_error);
  } 

  $sql = "SELECT Week, Ball1, Ball2, Ball3, Ball4, Ball5, Ball6 FROM sample";
  $result = $conn->query($sql);
  if ($result->num_rows > 0) {
   // output data of each row
   while($row = $result->fetch_assoc()) 
   {
    echo "<tr><td>" . $row["Week"]."</td><td>" . $row["Ball1"] . "</td><td>"
. $row["Ball2"]. "</td><td>". $row["Ball3"]. "</td><td>". $row["Ball4"].  "</td><td>".$row["Ball5"]. "</td><td>". $row["Ball6"]. "</td></tr>";
}
echo "</table>";

} else { echo "0 results"; }
$conn->close();
?>     


</table>
  • 0
    Непонятно, что вы подразумеваете под «рядом». У вас есть только один стол. Хотите две таблицы, каждая с колонками для недели и от Ball1 до Ball6? Или вы пытаетесь создать страницу, чтобы получить 30 строк на одном экране, а затем нажать кнопку «Далее» для следующих 30 строк?
  • 0
    Да, есть одна сгенерированная таблица, которая идет вниз по странице. Вместо этого, или нумерации страниц, я ищу решение, чтобы накрыть стол на 3 части рядом. После первых 30 строк он продолжается еще с 30 рядами с правой стороны от первых 30 строк, а затем с третьими 30 рядами. это продолжается так Я также вставил изображение, чтобы показать его сейчас.
Показать ещё 2 комментария
Теги:
html-table

2 ответа

1
Лучший ответ

Похоже, вам нужны отдельные таблицы для каждых 30 значений, отображаемых бок о бок, но с вашим изображением кажется, что они также перейдут к отдельной строке после трех групп из 30. Эта часть может обрабатываться с помощью CSS (т. width: 33%;), поэтому я предоставлю решение, которое обрабатывает часть PHP. В следующем примере используется счетчик, чтобы отделить каждую группу из 30 в новую таблицу.

<table class="result-table">
 <tr>
  <th>Week</th> 
  <th>Ball1</th> 
  <th>Ball2</th>
  <th>Ball3</th>
  <th>Ball4</th>
  <th>Ball5</th>
  <th>Ball6</th>
 </tr>


 <?php
$conn = mysqli_connect("localhost", "root", "", "db");
  // Check connection
  if ($conn->connect_error) {
   die("Connection failed: " . $conn->connect_error);
  } 

  $sql = "SELECT Week, Ball1, Ball2, Ball3, Ball4, Ball5, Ball6 FROM sample";
  $result = $conn->query($sql);
  if ($result->num_rows > 0) {

  // HERE IS WHERE I ADD A COUNTER
  $counter = 1;
   // output data of each row
   while($row = $result->fetch_assoc()) 
   {
        echo "<tr><td>" . $row["Week"]."</td><td>" . $row["Ball1"] . "</td><td>"
            . $row["Ball2"]. "</td><td>". $row["Ball3"]. "</td><td>". $row["Ball4"].  "</td><td>".$row["Ball5"]. "</td><td>". $row["Ball6"]. "</td></tr>";


            // HERE I INCREMENT THE COUNTER, AND REPEAT THE END OF THE CURRENT TABLE/BEGINNING OF THE NEXT IF $counter%30 == 0
            $counter++;
            if($counter % 30 == 0) { ?>
                </table>
                <table class="result-table">
                     <tr>
                      <th>Week</th> 
                      <th>Ball1</th> 
                      <th>Ball2</th>
                      <th>Ball3</th>
                      <th>Ball4</th>
                      <th>Ball5</th>
                      <th>Ball6</th>
                     </tr>
            <?php }
    }
echo "</table>";

} else { echo "0 results"; }
$conn->close();
?>     


</table>
  • 0
    Спасибо, mtr.web. Я попробовал ваше решение, оно решает проблему. и я могу настроить это с помощью CSS.
2

Получите вывод, который вы описываете, вы можете сразу взять все строки в ассоциативный массив, а затем пройти через столбцы в группах в зависимости от количества отображаемых столбцов.

ПРИМЕЧАНИЕ. Я добавил предложение order by в ваш оператор SQL.

<?php
    $numRowsPerGroup = 30;
    $rowTitles = array(
        array('title' => "Ball1",'colname' => "Ball1"), 
        array('title' => "Ball2",'colname' => "Ball2"),
        array('title' => "Ball3",'colname' => "Ball3"),
        array('title' => "Ball4",'colname' => "Ball4"),
        array('title' => "Ball5",'colname' => "Ball5"),
        array('title' => "Ball6",'colname' => "Ball6")
    );
    $conn = mysqli_connect("localhost", "root", "", "db");
    // Check connection
    if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    } 

    $sql = "SELECT Week, Ball1, Ball2, Ball3, Ball4, Ball5, Ball6 FROM sample ORDER BY week";
    $result = $conn->query($sql);
    $numrows = $result->num_rows;
    $allrows = $result->fetch_all(MYSQLI_ASSOC);

    if($allrows) {
        $rownum = 0;
        while($rownum < $numrows) {
            //  Output heading row for this group
            echo "<table>\n";
            echo "<thead>\n";
            echo "<tr>\n";
            echo "  <th>&nbsp;</th>\n";
            //  Calculate the starting and ending column numbers. These correspond to the rows in the results
            $startColNo = $rownum;
            $endColNo = $rownum + $numRowsPerGroup;
            if($endColNo > $numrows) {
                $endColNo = $numrows;
            }
            //  Output the week column headers
            for($colNo = $startColNo;$colNo < $endColNo;$colNo++) {
                echo "  <th>".$allrows[$colNo]['week']."</th>\n";
            }
            echo "</tr>\n";
            echo "</thead>\n";
            echo "<tbody>\n";
            //  Output each item type row of the columns for this group.
            foreach($rowTitles as $idx => $rowInfo) {
                echo "<tr>\n";
                //  Step through the columns for this group for this item within the range.
                echo "  <td class='rowtitle'>".$rowInfo['title']."</td>\n";
                for($colNo = $startColNo;$colNo < $endColNo;$colNo++) {
                    echo "  <td>".$allrows[$colNo][$rowInfo['colname']]."</td>\n";
                }
                echo "</tr>\n";
            }
            echo "</tbody>\n";
            echo "</table>\n";
            $rownum = $endColNo + 1;
        }
    } else { 
        echo "<p>0 results</p>\n"; 
    }
    $conn->close();
?>
  • 0
    Спасибо за ваше время и решение, Слоан. К сожалению, я получил некоторые ошибки, и я не думаю, что смогу понять это сам сейчас. Примечание: использование неопределенной константы numRowsPerGroup - предполагается, что в строке 58 'numRowsPerGroup' - $ endColNo = $ rownum + numRowsPerGroup; но я проверю твой код позже, мне нужно немного времени.
  • 0
    Это недостающий знак $. Я изменил код выше. Я добавил комментарий, которого сейчас не вижу, который не будет выводиться, как указано в вашем обновленном вопросе. Я добавил, прежде чем я увидел ваше обновление.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню