Newsgroup: it.comp.www.php
Titolo: Curiosita' su tabelle da MySql

Ho un database con una cavagnata di colonne (una quarantina, ma
potrebbero aumentare).
Quelle il cui nome inizia con "n" sono numeri, quelle con "d" sono
date, con "i" immagini e cosi' via.
Per evitare di scrivere una query chilometrica ho trovato questa
soluzione brutta e cattiva (e anche mal indentata, ma lo spazio e'
quello che e'): 
<?
$tHead = "";
$tRighe = "";
$Qry = "DESCRIBE tabella";
$result = mysql_query($Qry) or die ("$Qry Invalid query");
while ($row = mysql_fetch_assoc($result)) {
     $tHead .= "<th>" . $row['Field'] . "</th>\n"; 
}
$Qry = "SELECT * from tabella";
$result = mysql_query($Qry) or die ("$Qry Invalid query");
while ($row = mysql_fetch_assoc($result)) {
    $tRighe .= "<tr>";
    foreach ($row as $key=>$value) {
        (preg_match("/^n{1}/", $key)) ?
	    $Cella = "TD align=right":
	    $Cella = "TD";
        ($value > "") ? 
	    $a=$value:
	    $a="&nbsp;";
        (preg_match("/^d{1}/", $key)) ?
            $a = strftime("%d/%m/%Y", strtotime($a)):
            $a=$a;
        (preg_match("/^i{1}/", $key)) ?
            $a = "<IMG SRC=\"$a\">":
            $a=$a;
 
        $tRighe .= "<$Cella>$a</td>\n";
    }
    $tRighe .= "</tr>\n";
}
echo $tHead;
echo $tRighe;
?>
In questo modo ho i nomi di ogni campo MySql come intestazione della
tabella HTML, e la cosa mi va benissimo in fase di debug.
Il problema e' che il nome del campo non sempre corrisponde a quello
che vorrei far vedere come intestazione all'utente finale.
Inoltre le colonne visualizzate saranno selezionabili dall'utente,
quindi non posso neppure usare un ordine fisso nel codice, a meno di
non scrivere qualche centinaio di righe di if.
Qualcuno ha un trucchetto satanico per assegnare una stringa con
eventuali codici HTML ad un nome di campo?
Ritenete che creare una seconda tabella contenente i nomi dei campi
e le stringhe corrispondenti e metterla in un array tipo
$titolo["nomecampo"] = $stringa possa essere una soluzione valida,
soprattutto pensando alla futura manutenzione del database?
E, tanto per divagare, e' piu' veloce usare ?: o if(), specie nel 
caso in cui non ci siano alternative?
ciao e buona domenica
Marco
-- 
bernama -at- libero -puntino- it
La precision c'est pas la realite'.
Henri Matisse
+- PHPRndSig 0.02 --------------------------------------------32/44-+

 <?
CUT
echo "Selezionare os\n<select name='da_siste'>";
$resqw = mysql_db_query("$data","select * from data_siste where si_eable =
'U' ORDER BY si_order ASC") #desc = discendente /asc ascendente
       or die ("Tabella data_type inaccessibile");
       while($rigaqw = mysql_fetch_array($resqw)){
       $si_siste_db = $rigaqw['si_siste'];
       $si_nomeo_db = $rigaqw['si_nomeo']; #nome os
echo "<option value='$si_siste_db'>$si_nomeo_db</option>";
}
echo "</select>";
echo <table border='1'>";
echo "<tr><td>Nome della colonna</td><td>Nome 2a colonna</td></tr>";
$resqw = mysql_db_query("$data","select * from data_siste where si_eable =
'U' ORDER BY si_order ASC") #desc = discendente /asc ascendente
       or die ("Tabella data_type inaccessibile");
       while($rigaqw = mysql_fetch_array($resqw)){
       $si_siste_db = $rigaqw['si_siste'];
       $si_nomeo_db = $rigaqw['si_nomeo']; #nome os
echo <tr><td>$si_siste_db</td><td>$si_nomeo_db</td></tr>";
}
Echo "</tabele>";
attenzione alle righe (adattelo) quello spora funziona quello sotto credo di
si

soprattutto pensando alla futura manutenzione del database?
Si'... oppure puoi usare dei prefissi per i nomi.
	array(
		'n'	=> 'ALIGN="RIGHT"',
		'm'	=> // Money
		'sz'	=>
		'sp'	=>
	);
e un tipo default per i campi che non matchano.
Cosi' se aggiungi "n_camere", automagicamente lo formatta come numero,
anche se "n_camere" non e' nell'array PHP (ma "n" lo e'...).
Leonardo

 anche se "n_camere" non e' nell'array PHP (ma "n" lo e'...).
Interessante... e anche la soluzione di Red Owl non e' niente male.
Se stasera non c'e' niente di interessante sulle webcam ci studio un
po'...
ciao
Marco 
-- 
bernama -chiocciola- libero -.- it
Ma il senso della vita e'
orario o antiorario?
+- PHPRndSig 0.02 --------------------------------------------27/44-+

 anche se "n_camere" non e' nell'array PHP (ma "n" lo e'...).
Fatto!
Ho optato per la tabella con i titoli separata: in questo modo riesco
anche a gestire le intestazioni sia in italiano che in inglese senza
problemi, ed il giorno che vorro'/dovro' aggiungere altre lingue non
sara' un grosso problema.
ciao e grazie
Marco
-- 
bernama -chiocciola- libero -- it
i82092aa: Oops, you did something we didn't think of.
(Linux Kernel 2-4-19, /drivers/pcmcia/i82092.c)
+- PHPRndSig 0.02 --------------------------------------------40/44-+