2017-01-05 6 views
0

Ich versuche, mehrstufige Header-Tabelle dynamisch zu generieren. Leider habe ich nach langen Versuchen festgestellt, dass ich das alleine nicht kann.Tabelle Clospan-Header dynamisch generieren

Was ich mich versuche zu tun, um die Header-Zellen in eine Zelle wie auf dem Bildschirm zu fusionieren: enter image description here

Hier ist mein Arbeits PHP-Code ist. Nur eine Sache, die getan werden muss, ist trier 1 Header

PHP-Code:

<html> 
    <head> 
     <meta charset="UTF-8"> 
    </head> 
    <body> 


<!-- 
/************** 
* CSS styles * 
**************/ 
--> 

    <style type="text/css"> 
    h1 {font-family:Segoe UI;font-size:18px;} 
    h2 {font-family:Segoe UI;font-size:14px;font-weight:normal;} 
    table {border-collapse:collapse;border-spacing:0;border-color:#ccc;} 
    th {font-family:Segoe UI;font-size:13px;font-weight:bold;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#f0f0f0;} 
    td {font-family:Segoe UI;font-size:13px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#fff;} 
    </style> 


<!-- 
/********************** 
* connection details * 
**********************/ 
--> 

<?php 
    $host = "127.0.0.1"; 
    $user = "dnlw"; 
    $pass = ""; 
    $database = "ksiegarnia"; 
    $port = 3306; 
    $connect = mysql_connect($host, $user, $pass, $port); 

    if (!$connect) 
    { 
     die("Can't connect to database"); 
    } 

    if (!mysql_select_db($database)) 
    { 
     die("Can't select database"); 
    } 


/***************** 
* sending query * 
*****************/ 

    $query = file_get_contents("query.txt"); 

    mysql_query("SET NAMES 'utf8'"); 
    $result = mysql_query($query); 

    $row_num = mysql_num_rows($result); 
    $fields_num = mysql_num_fields($result); 

    if (!$result) 
    { 
     die("Query to show fields from table failed"); 
    } 


/********************** 
* printing the table * 
**********************/ 


    echo " 
    <title>Query result</title> 
    <h2>znaleziono: <b>{$row_num}</b></h2> 


    <table> 
     <thead> 
      <tr>"; 
       // ????????????????????????????????????????????? 
       for($i=0; $i<$fields_num; $i++) 
       { 
        $header = mysql_fetch_field($result); 
        echo "<th>{$header->table}</th>"; 
       } 
    echo " 
      </tr> 

      <tr>"; 
       // printing table headers 
       for($i=0; $i<$fields_num; $i++) 
       { 
        $header2 = mysql_fetch_field($result); 
        echo "<th>{$header->name}</th>"; 
       } 
    echo " 
      </tr> 
     </thead> 

     <tbody> 
      <tr>"; 
       // printing table rows 
       while($row = mysql_fetch_row($result)) 
       { 
        echo "<tr>"; 

        // $row is array... foreach(..) puts every element 
        // of $row to $cell variable 
        foreach($row as $cell) 
         echo "<td>$cell</td>"; 

        echo "</tr>\n"; 
       } 
       mysql_free_result($result); 
      echo" 
      </tr> 
     </tbody> 
    </table>"; 
    ?> 

    </body> 
</html> 

Link zur Datenbank: https://1drv.ms/u/s!AvpVESbXIIvxhrByuEodnjt5JTdgLA

Antwort

0

Ich denke, dass ich einfach ein assoziatives Array aller bauen würde Ihre Tabellennamen zuerst mit jeweils einer Zählung, wie viele Spalten sie überspannen, und dann diese für Ihre erste Kopfebene verwenden:

$table_names = array(); 
for($i=0; $i<$fields_num; $i++) { // count the number of times each $header->table occurs: 
    $header = mysql_fetch_field($result); 
    if(!isset($table_names[$header->table])) $table_names[$header->table] = 1; 
    else $table_names[$header->table]++; 
} 
// at this point, you get something like $table_names = [klienci=>4, zamowienia=>5, ksiazki=>5] 

Und dann Ihre erste Ebene der Header-Ausgang:

foreach($table_names as $table_name => $nb_of_occurences) { 
    echo '<th colspan="'.$nb_of_occurences.'">'.$table_name.'</th>'; 
} 

hoffe, das hilft!

+0

Wow! So elegant! Vielen Dank!!! – Daniel

+0

Sicher! Also sieht $ tables wie {klienci: 4, zamowienia: 5, ksiazki: 5} aus. Der foreach führt eine Schleife über jedes Element und weist den Schlüssel des assoziativen Arrays $ table zu, und sein Wert entspricht $ span. In der ersten Schleife wird $ table "klienci" und $ span den Wert "4" enthalten. Hilft das? – MacPrawn

+0

Ja, es hilft, aber ich kann immer noch nicht verstehen, warum $ span 4 auf der ersten Schleife ist. Wie ich es verstehe, sollte es von 1 für die 1. Schleife bis 4 für die 4. lopp erhöhen ... – Daniel