#php #html #html-table
#php #HTML #html-таблица
Вопрос:
Я пытался выяснить, как создать приведенную ниже таблицу на php, которую я затем включу на другую страницу, таблица, которую я хочу создать, это:
Я использовал приведенный ниже код, который работает с первыми строками rowspan, но не с любыми другими:
<?php
$tbl1 = sqlsrv_query($connys,"
select SectorTitle,DataTitle,sum(Aug18)[Aug18],sum(Sep18)[Sep18],sum(Oct18)[Oct18],sum(Nov18)[Nov18],sum(Dec18)[Dec18],sum(Jan19)[Jan19],sum(Feb19)[Feb19],sum(Mar19)[Mar19],sum(Apr19)[Apr19],sum(May19)[May19],sum(Jun19)[Jun19],sum(Jul19)[Jul19]
from tblsomename
");
if($tbl1 === false){
die( print_r( sqlsrv_errors(), true));
}
while( $row = sqlsrv_fetch_array($tbl1, SQLSRV_FETCH_BOTH)){
echo "<tr>";
echo "<td rowspan='3'>".$row['SectorTitle'] ."</td>";
while( $row2 = sqlsrv_fetch_array($tbl1, SQLSRV_FETCH_BOTH)){
$DataTitle=$row2['DataTitle'];
$Aug=$row2['Aug18'];
$Sep=$row2['Sep18'];
$Oct=$row2['Oct18'];
$Nov=$row2['Nov18'];
$Dec=$row2['Dec18'];
$Jan=$row2['Jan19'];
$Feb=$row2['Feb19'];
$Mar=$row2['Mar19'];
$Apr=$row2['Apr19'];
$May=$row2['May19'];
$Jun=$row2['Jun19'];
$Jul=$row2['Jul19'];
echo "<td>$DataTitle</td><td>$Aug</td><td>$Sep</td><td>$Oct</td><td>$Nov</td><td>$Dec</td><td>$Jan</td><td>$Feb</td><td>$Mar</td><td>$Apr</td><td>$May</td><td>$Jun</td><td>$Jul</td></tr>";
}
}
?>
Запрос не является фактическим запросом, но дает вам представление, поскольку он выводит через те же заголовки. Затем это включается в другой php-файл, который вставляет его между тегами и т.д.
В настоящее время мой код создает:
Это правильно, хотя, похоже, я не могу заставить его перебирать бит sectortitle
Комментарии:
1. Вам следует выполнить отладку,
$row
и$row2
я думаю, что ваш цикл не настолько хорош :/2. Похоже, вам нужно добавить a
</tr>
после того, как внутренняя частьwhile
закончилась (между двумя закрывающими фигурными скобками).3. Не
while
ли отсутствует какое-то условие? Первый while будет обработан только один раз, а все остальные данные будут обработаны во второмwhile
— потому что вы выполняете цикл с тем же набором результатов
Ответ №1:
Я думаю, вы можете обойтись одним циклом while с некоторой добавленной логикой для обработки составных строк:
$SectorTitle = "";
while( $row = sqlsrv_fetch_array($tbl1, SQLSRV_FETCH_BOTH)){
echo "<tr>";
// Check if there is a new sectortitle
if($SectorTitle != $row['SectorTitle']) {
$SectorTitle = $row['SectorTitle'];
echo "<td rowspan='3'>$SectorTitle</td>";
}
$DataTitle=$row['DataTitle'];
$Aug=$row['Aug18'];
$Sep=$row['Sep18'];
$Oct=$row['Oct18'];
$Nov=$row['Nov18'];
$Dec=$row['Dec18'];
$Jan=$row['Jan19'];
$Feb=$row['Feb19'];
$Mar=$row['Mar19'];
$Apr=$row['Apr19'];
$May=$row['May19'];
$Jun=$row['Jun19'];
$Jul=$row['Jul19'];
echo "<td>$DataTitle</td><td>$Aug</td><td>$Sep</td><td>$Oct</td><td>$Nov</td><td>$Dec</td><td>$Jan</td><td>$Feb</td><td>$Mar</td><td>$Apr</td><td>$May</td><td>$Jun</td><td>$Jul</td></tr>";
}
Комментарии:
1. Рад это слышать! Это отчет, который вам нужно будет регулярно выводить? Я спрашиваю, потому что думаю, что есть довольно простой способ избежать жестко заданных названий месяцев и сделать его немного более динамичным, но если это будет использоваться только один раз, тогда в этом нет смысла.