visualizzazione tabella - come fare???

  • Creatore Discussione Creatore Discussione FAX
  • Data di inizio Data di inizio

FAX

Utente Attivo
25 Giu 2004
103
0
0
49
www.mothersmilk.it
ciao!

ho costruito questa tabella:

ID smallint(4) No auto_increment
mese varchar(50) No
data date No 0000-00-00
locale varchar(50) No
info text No
IP varchar(15) No non loggato

per la gestione delle date del mio gruppo musicale.
l'inserimento e la cancellazione dei record funziona.

ora ho un quesito:

devo suddividere le date per mese.
così:

APRILE '05 (letto da $mese)

data 1 / descrizioni

data 2 / descrizioni

etc etc

MAGGIO '05 (letto da $mese)

data 1 / descrizioni

data 2 / descrizioni

etc etc

e via dicendo.

ho un file che mi visualizza l'intero db (legge, ordina e con un ciclo for presenta la visualizzazione), solo che per ogni data mi visualizza anche il mese ($mese)

sapete darmi qualche dritta???
le mie conoscenze di php sono limitate...
tnx!
 
Il mese che vedi nella data non deriva da "$mese" ma dal fatto che inserisci la data nel db come "date".
Non inserire il formato della data come "date", ma come un normale "varchar".
Poi ricava il dato del giorno da una variabile, ad esempio "$data", valorizzata in questo modo:
$data = date("d");
In questo modo visualizzerai solo il giorno del concerto.
 
non mi sono spiegato.

ogni data inserita ha il titolo indicato da $mese.
la data inserita come date, poi la scompongo e la ordino come GG/MM/AAAA.

ho solo bisogno di sapere come fare un ciclo per raggruppare le date in base al valore di $mese scrivendolo solo all'inizio come ho indicato nello schema.

dal codice php io ordino in base alla data, ma non riesco a fare questo raggruppamento (ci ho provato ma ho abbandonato il codice tutto)

la visualizzazione "completa" la faccio così:

<?


//mi connetto al DB e ottengo l'intera lista di record
include("include/db.inc.php");
$query = "SELECT * FROM tour order by data";
$res = mysql_query($query);

//ottengo il numero di record
$righe = mysql_num_rows($res);



for ($i; $i<$righe; $i++)
{

//leggo dal DB i dati della firma corrente
$ID = mysql_result($res, $i, "ID");
$mese1 = mysql_result($res, $i, "mese");
$data = mysql_result($res, $i, "data");
$locale = mysql_result($res, $i, "locale");
$info = mysql_result($res, $i, "info");

//formatto la data secondo lo standard italiano
list($data, $ora) = explode (" ", $data);
list($anno, $mese, $giorno) = explode ("-", $data);
$data = "$giorno-$mese-$anno";

//converto i "\n" in "<BR>" [ritorno a capo]
$info = nl2br($info);

//creazione delle righe

echo("
<table class=data>
<tr>
<td class=data-td>
<span class=data>$mese1</span>
<span class=data>$data</span>
</td>
</tr>
</table>
");?>

<?echo("
<span class=titolo> $ID</span>
<br>
<span class=titolo> $locale</span>
<br>
<span class=testo>$info</span>

");

}

mysql_close($db);//chiudo il db

?>

notate $mese1 (è la variabile che mi interessa) mi ero dimenticato che $mese lo uso già per scomporre la data.
 
ho risolto!!!!
:D

<?


//mi connetto al DB e ottengo l'intera lista di record
include("include/db.inc.php");
$query = "SELECT * FROM tour order by data";
$res = mysql_query($query);

//ottengo il numero di record
$righe = mysql_num_rows($res);
$conta=0;



for ($i; $i<$righe; $i++)
{

//leggo dal DB i dati della firma corrente
$ID = mysql_result($res, $i, "ID");
$mese1 = mysql_result($res, $i, "mese");
$data = mysql_result($res, $i, "data");
$locale = mysql_result($res, $i, "locale");
$info = mysql_result($res, $i, "info");

//formatto la data secondo lo standard italiano
list($data, $ora) = explode (" ", $data);
list($anno, $mesedata, $giorno) = explode ("-", $data);
$data = "$giorno-$mesedata-$anno";

//converto i "\n" in "<BR>" [ritorno a capo]
$info = nl2br($info);

//creazione delle righe

$conta++;

if ($conta<2) // visualizza solo se == 1
{
echo("

<span class=data>$mese1</span>
<br><br>
");
}

echo("

<span class=data>$data</span>
<br>
<span class=titolo> $locale</span>
<br>
<span class=testo>$info</span>
<br><br><br>
");?>



$controllo = mysql_result($res, $i+1, "mese");

if ($mese1 != $controllo) // se il prossimo mese è diverso ritorna a 0
{
$conta=0;
}

}

mysql_close($db);//chiudo il db

?>

ho pensato un po alla programmazione C che studiai 10 anni fa alle superiori e ZACK!!!

ora ho solo dei quesiti sull'impaginazione di questa pagina php con le tabelle e i css in linea.

dove posso postare???
 
Ultima modifica:
allora...tutto il mio entusiasmo è svanito quando ho "farcito" il database con nuovi record.
il codice funziona solo per gruppi di due date al mese.

mi sono sbattuto un po e ho pensato a questa strategia (mi sono fatto un flow chart):

1) start

2) $conta=0; (variabile per l'attivazione della visualizzazione del titolo/mese

3) cilclo for per tutta la lunghezza del DB

4) lettura dati e impostazione $mese1 (corrente) e $controllo (mese successivo)

5) $mese1 = $controllo ???

si > $conta=$conta+1;
no > $conta=0 e vai a riga (6)

6) $conta=1 ???

si > visualizza $mese1
no > vai a riga (7)

7) visualizza il resto del record

ritorno al ciclo FOR.

nel mio piccolo ho fatto delle prove su carta e dovrebbe funzionare.

l'ho tradotto così:

<?


//mi connetto al DB e ottengo l'intera lista di record
include("include/db.inc.php");
$query = "SELECT * FROM tour order by data";
$res = mysql_query($query);

//ottengo il numero di record
$righe = mysql_num_rows($res);
$conta=0;



for ($i; $i<$righe; $i++)
{

$demo=i+1;

//leggo dal DB i dati della firma corrente
$ID = mysql_result($res, $i, "ID");

$mese1 = mysql_result($res, $i, "mese");
$controllo = mysql_result($res, $demo, "mese");

$data = mysql_result($res, $i, "data");
$locale = mysql_result($res, $i, "locale");
$info = mysql_result($res, $i, "info");

//formatto la data secondo lo standard italiano
list($data, $ora) = explode (" ", $data);
list($anno, $mesedata, $giorno) = explode ("-", $data);
$data = "$giorno-$mesedata-$anno";

//converto i "\n" in "<BR>" [ritorno a capo]
$info = nl2br($info);

//creazione delle righe

if ($mese1 = $controllo)
{
$conta = $conta+1;
}

else { $conta=0; }

if ($conta = 1)
{
echo("

<span class=data>$mese1</span>
<br><br>
");
}

echo("
<table class=data>
<tr>
<td class=data-td>
<span class=data>$data</span>
</td>
</tr>
</table>
");?>

<?echo("
<span class=titolo> $ID</span>
<br>
<span class=titolo> $locale</span>
<br>
<span class=testo>$info</span>
<br>
<span class=testo>$conta</span>
<br>
<span class=testo>$demo</span>
<br><br>

");

}

mysql_close($db);//chiudo il db

?>

ma non funziona...
secondo me sbagli la sintassi deli vari cicli IF...
aiuto per favore!!!!
 
stavolta ce l'ho fatta!!!!

ho aggiunto un controllo anche sul record precedente, in modo da visualizzare la famosa variabile $mese1 solo se è il primo record del gruppo.

<?

//mi connetto al DB e ottengo l'intera lista di record
include("include/db.inc.php");
$query = "SELECT * FROM tour order by data";
$res = mysql_query($query);

//ottengo il numero di record
$righe = mysql_num_rows($res);

$conta=0; // contatore suddivisioni

for ($i; $i<$righe; $i++)
{

$demo=$i+1; // indice per lettura record successivo
$demo1=$i-1; // indice per lettura record precedente

//leggo dal DB i dati correnti
$ID = mysql_result($res, $i, "ID");

$mese1 = mysql_result($res, $i, "mese");
$controllo = mysql_result($res, $demo, "mese"); // variabile per mese successivo
$controllo1 = mysql_result($res, $demo1, "mese"); // variabile per mese precedente

$data = mysql_result($res, $i, "data");
$locale = mysql_result($res, $i, "locale");
$info = mysql_result($res, $i, "info");

//formatto la data
list($data, $ora) = explode (" ", $data);
list($anno, $mesedata, $giorno) = explode ("-", $data);
$data = "$giorno-$mesedata-$anno";

// "\n" = "<BR>"
$info = nl2br($info);

//creazione delle righe

if ($mese1==$controllo)
{
$conta=$conta+1;
} else {
if ($mese1==$controllo1) { // se si, non è il primo, quindi $conta=0
$conta=0;
}
else {
$conta=1; // è il primo record del mese, quindi $conta=1
}
}

if ($conta == 1) // stampa il titolo del mese
{
echo("

<span class=data>$mese1</span>
<br><br>
");
}

echo("
<table class=data>
<tr>
<td class=data-td>
<span class=data>$data</span>
</td>
</tr>
</table>
");?>

<?echo("
<span class=titolo> $locale</span>
<br>
<span class=testo>$info</span>
<br>
<br>

");

}

mysql_close($db);//chiudo il db

?>

ora farò le prove per impostare le <table> come nel vecchio file html.

sono soddisfatto!!!
:byebye:
 
se può interessare ho ottimizzato il codice inserendo un array per il controllo della visualizzazione del titolo (il nome del mese) una sola volta per ogni gruppo:

<?

//mi connetto al DB e ottengo l'intera lista di record
include("include/db.inc.php");
$query = "SELECT * FROM tour2 order by data";
$res = mysql_query($query);

//ottengo il numero di record
$righe = mysql_num_rows($res);

if ($righe<1) // DB vuoto
{
echo("
<center>
<br><br><br><br>
<span class=data>NESSUN<br>CONCERTO<br>IN<br>PROGRAMMA</span>
</center>

");

}

$controllo = array('1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'); // array controllo mese
$a=0; // indice per mese corrente
$conta=0; // variabile per la visualizzazione del titolo

for ($i; $i<$righe; $i++)
{

//leggo dal DB i dati correnti
$ID = mysql_result($res, $i, "ID");

$mese1 = mysql_result($res, $i, "mese");

$data = mysql_result($res, $i, "data");
$ilgiorno = mysql_result($res, $i, "ilgiorno");
$locale = mysql_result($res, $i, "locale");
$info = mysql_result($res, $i, "info");

//formatto la data
list($data, $ora) = explode (" ", $data);
list($anno, $mesedata, $giorno) = explode ("-", $data);
$selezione = $mesedata; // serve per il ciclo if
$data = "$ilgiorno $giorno";

// "\n" = "<BR>"
$info = nl2br($info);

// assegnazione indice mese corrente

if($selezione=='01') { $a=0; }
if($selezione=='02') { $a=1; }
if($selezione=='03') { $a=2; }
if($selezione=='04') { $a=3; }
if($selezione=='05') { $a=4; }
if($selezione=='06') { $a=5; }
if($selezione=='07') { $a=6; }
if($selezione=='08') { $a=7; }
if($selezione=='09') { $a=8; }
if($selezione=='10') { $a=9; }
if($selezione=='11') { $a=10; }
if($selezione=='12') { $a=11; }

// controlla se è la prima volta che si sta leggendo la data di un mese ($conta=1) altrimenti ($conta=0)
// incrementando $controllo[$a] ogni volta che si legge un mese nuovo

if($controllo[$a]==1) {
$controllo[$a]++;
$conta=1;
}
else {
$conta=0;
}

//creazione delle righe

// verifica per visualizzazione titolo ($conta==1) o no ($conta==0)

if($conta==1) {

?>
<br>
<hr width=80% height=1>
<br>

<table class=data>
<tr>
<td class=pic1><img src="../immagini/cane-tour.jpg" border="0"></td>
<td cass=text>

<?

echo("

<span class=titolo>$mese1</span>
<br><br>
");

?>

</td>
<td class=pic2><img src="../immagini/cane-tour.jpg" border="0"></td>
</tr>
</table>
<?

}

echo("
<span class=data>$data</span>
<br>
<span class=locale>$locale</span>
<br>
<span class=info>$info</span>
<br>
");

}
mysql_close($db);//chiudo il db
?>

volendo...
c'è quel ciclo if, per l'assegnazione dell'indice alla variabile $a.

sapete se c'è un altro modo per ottimizzarlo???

ciaooo!!!
 

Discussioni simili