Использовать PHP для отображения результатов MySQL в таблице HTML

Обновление для CodingBiz:

Я помещаю это в свой код:

for($i=1;$i<=$numRows;$i++) { $output .= '<tr>'; $row = $this->fetchAssoc($result); $colRow = $this->fetchAssoc($colResult); foreach($colRow as $colName) { $output .= "<td>".$row[$colName]."</td>"; } $output .= '</tr>'; } 

на месте

 for($i=1;$i<=$numRows;$i++) { $output .= '<tr>'; $row = $this->fetchAssoc($result); for($j=1;$j<=$colNumRows;$j++) { $colRow = $this->fetchAssoc($colResult); $output .= "<td>".$row[$colRow["COLUMN_NAME"]]."</td>"; } $output .= '</tr>'; } 

Что-то не так с этим?

Оригинальное сообщение:

Я пишу функцию в классе PHP для отображения результатов запроса в таблице. Я сам не структурирую ни одну из таблиц, я хочу, чтобы все было сделано с использованием PHP. Вот мой код:

 function allResults($table,$cols) { if(isset($cols)) { $query = "SELECT $cols FROM $table"; } else { $query = "SELECT * FROM $table"; } $result = $this->query($query); $numRows = $this->numRows($result); $colQuery ="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='shareride' AND TABLE_NAME='$table'"; $colResult = $this->query($colQuery); $colNumRows = $this->numRows($colResult); $output = '<table class="allResults">'; $output .= '<tr>'; for($i=1;$i<=$colNumRows;$i++) { $colRow = $this->fetchAssoc($colResult); $output .= "<td>".$colRow["COLUMN_NAME"]."</td>"; } $output .= '</tr>'; for($i=1;$i<=$numRows;$i++) { $output .= '<tr>'; $row = $this->fetchAssoc($result); for($j=1;$j<=$colNumRows;$j++) { $colRow = $this->fetchAssoc($colResult); $output .= "<td>".$row[$colRow["COLUMN_NAME"]]."</td>"; } $output .= '</tr>'; } $output .= '</table>'; return $output; } 

Если это неясно, query относится к mysqli_query , numRows относится к mysqli_num_rows , а fetchAssoc относится к mysqli_fetch_assoc . Имя базы данных «shareride».

Я знаю, что мне не хватает чего-то в этой строке:

 $output .= "<td>".$row[$colRow["COLUMN_NAME"]]."</td>"; 

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

Что мне не хватает? Любая помощь была бы высоко оценена!

Solutions Collecting From Web of "Использовать PHP для отображения результатов MySQL в таблице HTML"

Получить имена данных и столбцов из одного набора результатов

  <?php $i = 0; $colNames = array(); $data = array(); while($row = ***_fetch_assoc($res)) //where $res is from the main query result not schema information { //get the column names into an array $colNames if($i == 0) //make sure this is done once { foreach($row as $colname => $val) $colNames[] = $colname; } //get the data into an array $data[] = $row; $i++; } ?> 

ОБНОВЛЕНИЕ: Предлагается @YourCommonSense для замены вышеуказанного кода, и это сработало, просто и короче – ПУТЬ ПОЛУЧИТЬ КНОПКИ НАКЛОНА / МАССИВЫ КОЛОННЫ БЕЗ ОТКЛОНЕНИЯ ЧЕРЕЗ КАК Я ДОЛЖЕН

  $data = array(); while($row = mysql_fetch_assoc($res)) { $data[] = $row; } $colNames = array_keys(reset($data)) 

Продолжение по-прежнему: печать таблицы

  <table border="1"> <tr> <?php //print the header foreach($colNames as $colName) { echo "<th>$colName</th>"; } ?> </tr> <?php //print the rows foreach($data as $row) { echo "<tr>"; foreach($colNames as $colName) { echo "<td>".$row[$colName]."</td>"; } echo "</tr>"; } ?> </table> 

Результат испытаний

введите описание изображения здесь

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

Вы также можете сделать их отдельными функциями.

  1. Никогда не смешивайте код обработки базы данных с кодом вывода HTML. Это два совершенно разных вопроса. Сделать функцию allResults только возвращать массив с данными, а затем вы можете сделать другую функцию для печати по-фантастически (а не в классе обработчика базы данных).
  2. Вам не нужна информационная схема, чтобы получить имя столбца – вы уже имеете ее в возвращаемых ключах массива.
  3. Вам также не нужны numRows – используйте while () и foreach ()
  4. НИКОГДА не вставляйте ничего в запрос напрямую, как вы делаете с $cols – в конечном итоге это приведет к ошибкам и инъекциям.
  5. Такая функция, не принимая некоторые параметры для запроса, совершенно не имеет особого значения, особенно в контексте перехода от mysql к mysqli – вы собираетесь использовать ее как старую школьную mysql-запрос, вставляя переменные, а не заполнители. Таким образом, миграция полностью бесполезна.
  6. Чтобы знать «что-то не так с кодом», нужно запустить его, а не смотреть. Запустите и отлаживайте свой код, выводя ключевые переменные и убедившись, что вы видите ошибки.

я бы попытался заменить часть данных чем-то вроде:

 while($row = $this->fetchAssoc($colResult)) { echo "<tr>"; foreach($row as $value) { echo sprintf("<td>%s</td>",$value) } echo "</tr>"; } 

я знаю, что это не правильный ответ, но действительно трудно прочитать этот код imho