- Home
- Categorie
- Coding e Sistemistica
- Coding
- celle dinamiche
-
celle dinamiche
Ciao a tutti ho n piccolo problemino.
Sto creando delle righe e celle dinamiche,
una cosa che in futuro potrebbe servire . Avendo ad esempio 7 record in un db, voglio che mi crei una tabella con 2 celle(TD) e tante righe(TR) quanti record ho nel db
Ho provato prima a farlo statico e va bene, quando lo faccio dinamico non mi trovo più con i conti. Vi posto il codice
[PHP]
<table border="1" cellpadding="0" cellspacing="0">
<?php
$result_query_1=mysql_query("SELECT * FROM video ORDER BY id_video desc")
or die("errore nella query;".mysql_error());
$a=0;
for($b = 0; $b < mysql_num_rows($result_query_1); $b++)
{
print"
<tr>";
for($c = 0; $c < 2; $c++, $a++)
{
$vid=mysql_fetch_assoc($result_query_1);
print"
<td valign='top' height='15'>
$vid[percorso]
</td>";
print"
<td width='6'></td>";
}
print"
</tr>";
print"
<tr>";
print"
<td height='6'></td>";
print"
</tr>";
}?></table>
[/PHP]
Non da nessun errore di codice, il risultato che mi da è strano
nel db ci sono 7 record lui li moltiplica per 2 e mi restituisce 14 celle di cui 7 piene e 7 vuote
Normale non è! Mi date un aiuto
Grazie da danny1975
-
Perchè fai due for annidati?
Non sarebbe più facile una cosa del genere:
[php]
$result = mysql_query("....");
while ($row = mysql_fetch_array($result)){
echo "<tr><td>".$row['percorso']."</td><td height='6'></td></tr>";
}[/php]
Non capisco l'utilità di tutto quel codice inutile sinceramente!
-
Ciao
forse io non mi sono spiegato bene e mi scuso
Il codice che mi hai scritto stampa un elenco in verticale tipo
numero_1
numero_2
numero_3 ecc
io invece sto cercando di ottenere un risultato diverso
numero_1 / numero_2
numero_3 / numero_4
numero_5 / eccciao da danny
-
Concettualmente è semplice, ad ogni giro del ciclo che riporta i risultati della query controlli se il resto di una divisione per due del contatore è uguale a zero, in quel caso printi i comandi di fine e inizio riga.
Ti posto un esempio pratico a livello concettuale di ciò che intendo:[php]
echo "<table>";
echo "<tr>";$i = 1; # variabile di conteggio
$result = mysql_query("....");
while ($row = mysql_fetch_array($result)) # ciclo risultati query
{
echo "<td>".$row['percorso']."</td>";if ($i%2 == 0) # verifico se stiamo stampando il secondo record della riga echo "</tr><tr>"; ++$i; # incremento del contatore}
echo "</tr>";
echo "</table>";
[/php]Spero di essere riuscito a spiegarmi in maniera sufficientemente chiara, se ci sono altri dubbi o risolvi fammi sapere
-
Ciao e grazie.
Funziona benissimo ed era quello che intendevo fare,
ma anche con i commenti non riesco a comprendere bene i passaggi.
Adesso cerco di leggerli meglio e di fare la stessa cosa con un ciclo for.
Grazie da danny1975
-
In sostanza, prima di iniziare il ciclo, definisco una variabile di conteggio ( "$i", nel mio caso ).
Nel ciclo viene stampata sempre una cella con l'informazione recuperata da database, subito dopo questo print c'è un controllo: verifico se la variabile di conteggio diviso due mi restituisce come resto della divisione 0.
Questo significa che la condizione sarà quindi verificata ogni quando il contatore conterrà un numero pari (e quindi, logicamente parlando, ogni due numeri).
Ovviamente, alla fine di ogni giro del ciclo poi incremento il contatore

Se vuoi invece usare un for ti consiglio, per una questione di ottimizzazione, di istanziare la funzione mysql_num_rows in una variabile esterna alla dichiarazione del ciclo poichè, altrimenti, ad ogni verifica della condizione essa viene rieseguita.
[php]$sql = mysql_query(".....");
$rows = mysql_num_rows($sql);for ($i = 0; $i < $rows; ++$i)
{
....[/php]Ad ogni modo, puoi decidere di stampare più celle per riga semplicemente stabilendo di restituire il resto di una divisione per un altro numero qualsiasi a tua scelta
