2013-06-12 5 views
0

У меня возникла проблема и попытка решить это в течение 4 часов, но до сих пор нет решения. У меня есть динамические данные, которые я хотел бы показать в виде таблицы, как показано нижеPHP: отображение динамических данных в виде таблицы в столбце wax

Header1 .................. Header2 ........... .... .. HeaderN
data1 из hEADER1 .... data1 из hEADER2 .... data1 из HeaderN
data2 из hEADER1 .... data2 из hEADER2 .... data2 из HeaderN
Data3 из hEADER1 .... данные3 заголовка2 .... данные3 заголовкаN
.................................. ...........................
данныеN заголовка1 .... данныеN заголовка2 .... данныеN заголовкаN

Это мой код

foreach($query_all_field as $secondary_data): 
    ?><th><?php echo $secondary_data;?></th><?php 
      $sql_data = mysql_query("SELECT `$secondary_data` FROM `$table_name`"); 
      if(mysql_num_rows($sql_data)){ 
       while($result_data = mysql_fetch_object($sql_data)){ 
       ?><tr><td><?php echo $result_data->$secondary_data;?></td></tr><?php 
       } 
      } 
endforeach; 

Наиболее важный вопросом является $secondary_data всех имен заголовочных таблиц, которая является полностью динамичной. Затем я пытаюсь найти данные каждого заголовка.

Но он показывает сейчас вроде этого

Header1
data1 из HEADER1
data2 из HEADER1
data3 из HEADER1
HEADER2
data1 из HEADER2
data2 из HEADER2
Data3 из HEADER2
. , ,
HeaderN
data1 из HeaderN
data2 из HeaderN
Data3 из HeaderN

ответ

1

Вы не правильно строите свой стол. вы открываете элемент TR перед тем, как закрыть/использовать тот, который предшествует ему. Попробуйте:

echo '<table><tr>'; 

foreach($query_all_field as $secondary_data): 
    ?> 
    <td> 
      <table> 
       <tr><th><?php echo $secondary_data;?></th></tr> 
       <?php 
       $sql_data = mysql_query("SELECT `$secondary_data` FROM `$table_name`"); 
       if(mysql_num_rows($sql_data)){ 
        while($result_data = mysql_fetch_object($sql_data)){ 
        ?><tr><td><?php echo $result_data->$secondary_data;?></td></tr><?php 
        } 
        }?> 
      </table> 
    </td> 
    <?php 
endforeach; 

echo '</tr></table>'; 
+0

Это работающий брат, необходимо правильно спроектировать. – Kabir

0

Вам понадобятся две петли вместо одного.

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

Вторая петля проходит через ваши строки базы данных и имеет внутренний цикл для отображения разных полей в разных ячейках таблицы.

0

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

Чтобы получить то, что, я думаю, вы хотите, вы можете получить все данные в одном запросе, используйте array_keys в первой строке, чтобы узнать, с какими столбцами вы работаете, а затем пропустите данные, добавляя новую строку таблицы для каждой строки базы данных. Например;

$data = mysql_query("SELECT * FROM `$table_name`"); 
if (mysql_num_rows($data)) { 
    echo '<table>'; 
    $headerRow = true; 
    while ($row = mysql_fetch_assoc($data)) { 
     if ($headerRow) { 
      $headerRow = false; 
      echo '<tr>'; 
      foreach (array_keys($row) as $header) { 
       echo "<th>$header</th>"; 
      } 
      echo '</tr>';  
     } 
     echo '<tr>'; 
     foreach ($row as $value) { 
      echo "<td>$value</td>"; 
     } 
     echo '</tr>'; 
    } 
    echo '</table>'; 
} 

Следует также отметить, что mysql_* функций устарели, и вы должны смотреть на переключение на другую библиотеку, такие как MySQLi или PDO.

Смежные вопросы