PHP "для цикла" <th>тег, из базы данных MySQL в таблицу HTML - PullRequest
0 голосов
/ 30 апреля 2019

Я создаю «таблицу HTML» из «базы данных MySQL».Мне удалось сделать «цикл php для» для получения «тега ячейки <td>», но как я могу сделать «цикл php для» для получения «тега заголовка <th>»?Спасибо.

Вот мой код:

$query = "SELECT * FROM Landscapes";
$queryResult = $conn->query($query);

echo "<table>";

while ($queryRow = $queryResult->fetch_row()) {
    echo "<tr>";
        for($i = 0; $i < $queryResult->field_count; $i++){
        echo "<td>$queryRow[$i]</td>";
        }
    echo "</tr>";
}

echo "</table>";

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Используйте fetch_assoc() вместо fetch_row(). Он вернет ассоциативный массив, ключами которого являются имена столбцов.

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

$firstRow = true;
while ($queryRow = $queryResult->fetch_assoc()) {
    if ($firstRow) {
        echo "<tr>";
        foreach (array_keys($queryRow) as $name)) {
            echo "<th>$name</th>";
        }
        echo "</tr>";
        $firstRow = false;
    }
    echo "<tr>";
    foreach($queryRow as $value){
        echo "<td>$value</td>";
    }
    echo "</tr>";
}
0 голосов
/ 30 апреля 2019

Здравствуйте и добро пожаловать в переполнение стека!

Вам нужен способ извлечь все данные из базы данных с именами столбцов.
PDO :: query метод возвращает PDO :: Statement , поэтому вы можете извлечь все данные с помощью PDO :: fetchAll и передать PDO :: FETCH_ASSOC в качестве аргумента для извлечения данных в виде ассоциативного массива избазы данных и удалите цикл while из вашего кода.

Таким образом, однажды с массивом данных вы можете манипулировать им с помощью функций массива , и тогда ваш код будет выглядеть так:

$stmt = $conn->query('SELECT * FROM Landscapes');
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

$headers    = sprintf('<thead><tr><th>%s</th></tr></thead>', join('</th><th>', array_keys($result[0])));
$content    = '';

foreach ($result as $result) {
   $content .= sprintf('<tr><td>%s</td></tr>', join('</td><td>', array_values($result)));
}

printf('<table border="1">%s%s</table>', $headers, $content);

Ссылки по теме:

...