#php #html #sql
#php #HTML #sql
Вопрос:
Предыстория
Я использую приведенный ниже код для создания HTML-таблицы на основе результатов SQL.
Код
$stid = oci_parse($conn, "
SELECT *
FROM
(
SELECT orders.order_no, orders.porder_no, orders.date, order_totals.value
FROM orders, order_totals
WHERE orders.order_no = order_totals.order_no
AND orders.account_no = '" . $_SESSION['session_account'] . "'
ORDER BY orders.order_no DESC
)
WHERE ROWNUM <= 15
");
oci_execute($stid);
echo "<table class='table'>
<thread>
<tr>
<th>Order No</th>
<th>Purchase Order No</th>
<th>Date</th>
<th>Value</th>
</tr>
</thread>
<tbody>";
while ($row = oci_fetch_array($stid, OCI_NUM)) {
echo "<tr>";
echo '<td><a href="view.php?id=' . $row['0'] . '">' . $row['0'] . '</a></td>';
echo "<td>" . $row['1'] . "</td>";
echo "<td>" . $row['2'] . "</td>";
echo "<td>" . $row['3'] . "</td>";
echo "</tr>";
unset($row);
}
echo "</tbody>
</table>";
Вопрос
Можно ли сделать часть генерации HTML-таблицы в коде более динамичной, чтобы, если мне нужно добавить дополнительный столбец, например, я мог просто исправить SQL-часть в коде?
У меня была идея установить заголовки столбцов, используя AS
в SQL, и я могу изменить SQL, чтобы использовать AS
, чтобы показать реальные заголовки столбцов, которые я хочу, например
SELECT orders.order_no AS "Order No"
, orders.porder_no AS "Purchase Order No"
, orders.date AS "Date"
, order_totals.value AS "Total"
но как насчет части таблицы HTML, есть ли какой-нибудь способ просто динамически печатать все столбцы и строки, например, возможно, создать функцию printTable
, которая будет обрабатывать любую таблицу?
Ответ №1:
Переменная $row — это массив, поэтому вы также можете перебирать его. Поскольку вы хотите обработать свое первое поле по-другому, запишите его перед циклом и запустите цикл с 1.
while ($row = oci_fetch_array($stid, OCI_NUM)) {
echo "<tr>";
echo '<td><a href="view.php?id=' . $row[0] . '">' . $row[0] . '</a></td>';
for ( $ii = 1; $ii < count($row); $ii ) {
echo "<td>" . $row[$ii] . "</td>";
}
echo "</tr>";
}
Я не знаю, для чего был unset($row), поэтому я оставил его.
Комментарии:
1. Спасибо! Можно ли также записать заголовки столбцов из SQL?
Ответ №2:
Вы можете использовать:
SELECT * FROM {TABLENAME}
Затем извлеките массив.
Вы можете получить данные с $row['{FIELDNAME}']
Ответ №3:
Вы можете использовать двойной цикл:
$results = $PDO->fetchAll(PDO::FETCH_ASSOC); // here is all columns and rows from db query.
echo '<table><tr>';
// loop only first row to get header
foreach ($results[0] as $header => $value) {
echo "<th>{$header}</th>"
}
echo '</tr>';
// loop all rows
foreach ($results as $row) {
echo '<tr>';
// and loop any number of columns
foreach ($row as $cellName => $cell) {
// If you have only one special case, than use if statement
switch ($cellName) {
case 'order_no':
echo "<td><a href='http://example.com/getOrder?id={$cell}'>{$cell}</a></td>";
break;
default: echo "<td>{$cell}</td>";
}
}
echo '</tr>';
}
echo '</table>';