Newsgroup: it.comp.www.php
Titolo: problemi con creazione tabella complessa

Salve ragazzi...
Ho un problema con l'implementazione di uno script (che trovate qua
sotto...).
La tabella che mi deriva da una query posta database mysql e' troppo
lunga per una consultazione sulle pagine web(80 campi) ed allora ho
deciso di spezzare la suddetta in tante "tabelle"(anche se in realta'
la tabella e' una sola)
Viene generata una "tabella" ogni 10 campi (in questo caso) ma ad ogni
creazione di "tabella" vorrei anche riportare dei campi chiave che mi
ricordino delle informazioni che mi permettano di capire a cosa sono
riferiti i dati (un po' come in Excel si usa il "colonne da ripetere a
sinistra")
I campi chiavi che sono contenuti nell'array sono, LOC,PARC,ANNO,TESI
faccio un esempio
Attualmente il risultato e' questo:
LOC,ANNO,PARC,TESI,DATO1,DATO2,DATO3,DATO4,DATO5,DATO6 //qui va a capo
,DATO7,DATO8,DATO9,DATO10,DATO11,DATO12,DATO13,DATO14,DATO15,DATO16
//qui va a capo ed avanti
Come vedete la seconda riga parte direttamente con i dati senza alcun
riferimento... e la consultazione della tabella e' improponibile...
io vorrei ottenere questo
LOC,ANNO,PARC,TESI,DATO1,DATO2,DATO3,DATO4,DATO5,DATO6 //qui va a capo
LOC,ANNO,PARC,TESI,DATO7,DATO8,DATO9,DATO10,DATO11,DATO12 //qui va a
capo
Qualche suggerimento?
Grazie in anticipo...
---- SCRIPT ----------------
// Determina il numero dei campi per suddividere la tabella ...
$d=10;
//-------------------------------------
$num_tabelle=intval($ncampi/$d)+1;
# CREAZIONE TABELLA 1 CON RISULTATI QUERY
echo "<table width=100% cellpadding='1' cellspacing='0' border='1'>";
for ($t = 1; $t <= $num_tabelle; $t++) {
  echo "\n<tr><th>No</th>";
//
// ciclo per scrivere i nomi dei campi ...
//
  for ($i = ($t-1)*$d; $i <= ($t*$d) - 1; $i++) {
    if ($i<$ncampi){
      $nomecampi = mysql_field_name($query, $i);
      echo "<td class=db>", $nomecampi, "</td>";
    }
  }
  echo "</tr>\n";
//
// ciclo per scrivere i valori nei campi ...
//
  $i=0;
  mysql_data_seek($query,0);
  for ($i = 0; $i <= $nrighe - 1; $i++) {
    # Colore delle righe.
    $rc = (($i/2 - intval($i/2)) > .1) ? "CCCCCC" : "FFFFCC";
    echo "<tr bgcolor='", $rc, "'><td><b>", ($i + 1), "</b></td>";
    $k = mysql_fetch_row($query);
    for ($j = ($t-1)*$d; $j <= ($t*$d) - 1; $j++) {
      echo "<td>", $k[$j], "</td>";
    }
    echo "</tr>\n";
  }
}
echo "</table>\n";


Secondo me ti conviene spezzare davvero in tante tabelle, non spezzare ogni
riga in 8... poi in ogni tabella aggiungi un campo ID autoincrementante. In
questo modo, in ogni tabella tutte le righe che hanno campo ID=n si
riferiscono allo stesso oggetto. Cosi' sfrutti le potenzialita' delle
relazioni in un database ;o)
Tabella 1 (11 campi):
   ID, LOC,ANNO,PARC,TESI,DATO1,DATO2,DATO3,DATO4,DATO5,DATO6
Tabella 2 (11 campi):
   ID,DATO7,DATO8,DATO9,DATO10,DATO11,DATO12,DATO13,DATO14,DATO15,DATO16
ecc

...


la tabella e' una sola)
Benche' mi spezzi il cuore dirlo, si puo' risolvere (a patto di usare
solo Netscape e Internet Explorer: Opera non e' compatibile) usando i
DHTML.
In pratica, crei una tabella larga 80 campi, ottenuta da una TABLE ed
80 sotto-TABLEs, ognuna dentro il proprio <DIV>.
Rendendo invisibili i DIV da 11 ad 80, vedi solo le prime 10 colonne;
un bottone "<", con JavaScript, puo' nascondere il campo 1 e mostrare
il campo 11. Questo ha l'effetto di "spostare a sinistra" il campo di
visione. Allo stesso modo con ">" sposti a destra.
Poi, basta che invece le prime 5 colonne siano sempre visibili (cioe'
dato N > 5, mostri i DIV da 1 a 5 e da N a N+5 e nascondi da 6 a N, e
da N+6 a 80), e hai ottenuto una tabella "pseudo Excel", e che "pesa"
solo sul client, non sul server.
Leonardo