• User Attivo

    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


  • User Attivo

    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!


  • User Attivo

    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 / ecc

    ciao da danny


  • User

    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 :ciauz:


  • User Attivo

    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


  • User

    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 :ciauz: