0

我面临一个问题,并试图解决这个问题 4 小时,但直到现在还没有解决方案。我有动态数据,我喜欢将其显示为如下表

Header1........ Header2.. .. HeaderN
data1 of Header1.. data1 of Header2.. .. HeaderN 的 data1 Header1 的data2.... Header2
的 data2.... HeaderN 的 data2 Header1 的 data3.... Header2
的 data3.... HeaderN 的 data3
...... .....................................................
Header1 的 dataN.... Header2 的 dataN.... HeaderN 的 dataN

这是我的代码:

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 of Header1
data2 of Header1 data3
of Header1 Header2 data1 of Header2 data2 Header2 data3 of Header2 。. . HeaderN data1 of HeaderN data2 of HeaderN data3 of HeaderN








4

3 回答 3

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>';
于 2013-06-12T15:23:19.440 回答
0

你需要两个循环而不是一个。

在循环中首先显示标题,您可以将标题字段存储在数组中(如有必要......)。

第二个循环遍历您的数据库行,并有一个内部循环来显示不同表格单元格中的不同字段。

于 2013-06-12T15:20:21.667 回答
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。

于 2013-06-12T15:29:32.740 回答