как создать таблицу серверной стойки с PHP Mysql - PullRequest
0 голосов
/ 20 апреля 2019

Я создаю стоечный сервер с PHP и MySQL.Сначала мне нужно создать динамическую таблицу с помощью rowspan, затем я попробую перетащить n с помощью Ajax.

Я просмотрел сообщения и перепробовал все доступные решения, но не смог настроить выравнивание между rowspan и ID.

Буду очень признателен за любые предложения, ссылки или решения для достижения результата.

MySQL

id name
1  
2  test
3  test
4
5  server1
6  server1
7  server1
8
9  RHM
10
$sql = "select * from nasser ORDER BY id DESC, name DESC";
$query = mysqli_query($dbconnect,$sql);

while ($row = mysqli_fetch_array($query)) 
{
    $result[$row['name']][] = $row['id'];
}

?>
<!DOCTYPE html>
<html>
    <body>
        <table id="invoices" border="1">
            <thead>
                <th>name</th>
                <th>ID</th>
            </thead>
            <tbody>
                <?php

                    foreach($result as $name => $id) {
                        echo '<tr>';
                        echo '<td rowspan='. count($id) . '>' . $name . '</td>';
                        $count = 0;
                        foreach ($id as $id) {
                            if ($count != 0) {
                                echo '<tr>';
                            }
                            echo "<td>$id</td>";
                            echo "</tr>";
                            $count++;
                        }
                    }
                ?>
            </tbody>
        </table>
    </body>
</html>

Окончательный результат должен выглядеть следующим образом:

Desired result

Я не могу выровнять строки, и в настоящее время это выглядит так:

Current result

1 Ответ

0 голосов
/ 20 апреля 2019

Наконец-то у меня получилось, сославшись на этот пост Динамический диапазон строк при извлечении записей из базы данных и ответ от Динеш Патры.

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

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

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

Я изменил его код, включив в него простую проверку, является ли значение строки пустым или нет.

Ниже полный код.

<html>
    <head>
        <style>
            table tr td, table tr th{
                border: black 1px solid;
                padding: 5px;
            }
        </style>
    </head>
    <body>
        <?php
define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "");
define("DATABASE", "rack"); 

$dbconnect = new mysqli(HOST, USER, PASSWORD, DATABASE);

$sql = "select * from test ORDER BY id DESC, name DESC";
$result = mysqli_query($dbconnect,$sql);

$arr = array();

        # Intialize the array, which will 
        # store the fetched data.
        $id = array();
        $name = array();

        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
        #     data saving and rowspan calculation        #
        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#

        # Loop over all the fetched data, and save the
        # data.
        while($row = mysqli_fetch_assoc($result)) {

            array_push($id, $row['id']);
            array_push($name, $row['name']);
            if (!isset($arr[$row['name']])) {
                    $arr[$row['name']]['rowspan'] = 0;
                }
            $arr[$row['name']]['printed'] = 'no';
            $arr[$row['name']]['rowspan'] += 1;
        }

        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        #        DATA PRINTING             #
        #%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
        echo "<table cellspacing='0' cellpadding='0'>
                <tr>
                    <th>id</th>
                    <th>name</th>
                    <th>id</th>
                </tr>";

        for($i=0; $i < sizeof($id); $i++) {
            $valName = $name[$i];
            echo "<tr>";

            # If this row is not printed then print.
            # and make the printed value to "yes", so that
            # next time it will not printed.
            echo "<td>".$id[$i]."</td>";
            if(empty($valName)) //if name is empty, print blank td
            {
                echo "<td></td>";
            }
            else
            {
                if ($arr[$valName]['printed'] == 'no') 
                {
                    echo "<td rowspan='".$arr[$valName]['rowspan']."'>".$valName."</td>";
                    $arr[$valName]['printed'] = 'yes';
                }
            }
            echo "<td>".$id[$i]."</td>";
            echo "</tr>";
        }
        echo "</table>";
        ?>
    </body>
</html>

Изображение таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...