Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 27

Discussione: rowspan dinamico

  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

    rowspan dinamico

    Se ho una tabella del db impostata coi prezzi in questo modo:

    codice:
    Periodo         Cam.singola Cam.doppia 
    -------------------------------------------------------
    01/01 - 01/04    38,00        58,00
    08/10 - 31/12    38,00        58,00      
    
    02/04 - 13/05    46,50         74,00
    10/09 - 07/10    46,50         74,00     
    
    14/05 - 08/07    53,50         87,00       
    
    09/07 - 29/07    59,50         110,00
    27/08 - 09/09    59,50         110,00
    come posso fare a visualizzarla in questo modo.
    In pratica come si crea un rowspan dinamico? Grazie a tutti.

    codice:
    Periodo         Cam.singola  Cam.doppia
    -------------------------------------------------------
    01/01 - 01/04 
    08/10 - 31/12    38,00        58,00      
    ------------------------------------------------------- 
    
    02/04 - 13/05 
    10/09 - 07/10    46,50         74,00      
    ------------------------------------------------------- 
    
    14/05 - 08/07    53,50         87,00      
    -------------------------------------------------------
    09/07 - 29/07 
    27/08 - 09/09    59,50         110,00      
    -------------------------------------------------------

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Nessuno che abbia mai affrontato questo problema?

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Scusate se uppo ancora.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ho capito. Mi sa che dovrò rassegnarmi a fare la solita tabellina.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    :master:

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Allora.Penso di essere sulla buona strada:
    Codice PHP:
    $query mysql_query("select date_format(data_inizio,\"%d/%m\") as inizio, date_format(data_fine,\"%d/%m\") as fine, prezzo_singola,prezzo_doppia from prezzi_info 
    where idstrutt = 1 order by prezzo_singola"
    );

    echo 
    "<table border=\"1\">";
    while (
    $resDati[] = mysql_fetch_array($query)) ;
    for (
    $i=0;$i<count($resDati); $i++)

    $rowsp 1;
      if (
    $resDati[$i]['prezzo_singola'] == $resDati[$i+1]['prezzo_singola'])
      {
      
    $rowsp++;
      echo 
    "<tr>";
      echo 
    "<td>".$resDati[$i]["inizio"]."-".$resDati[$i]["fine"]."</td>";
      echo 
    "<td rowspan=\"$rowsp\">".$resDati[$i]["prezzo_singola"]."</td>";
      echo 
    "</tr>";
      echo 
    "<tr>";
      echo 
    "<td>".$resDati[$i+1]["inizio"]."-".$resDati[$i+1]["fine"]."</td>";
      echo 
    "</tr>";
      
    $resDati array_slice($resDati,1);      // riduco progressivamente la dimensione dell'array
      
    }
      else
      {
      echo 
    "<tr>";
      echo 
    "<td>".$resDati[$i]["inizio"]."-".$resDati[$i]["fine"]."</td>";
      echo 
    "<td>".$resDati[$i]["prezzo_singola"]."</td>";
      echo 
    "</tr>";
      
    $resDati array_slice($resDati,1);      // riduco progressivamente la dimensione dell'array
      
    }
    }
    echo 
    "</table>"
    Il codice postato funziona nel caso i prezzi equivalenti siano al massimo due.Con tre va tutto a rotoli.
    Teoricamente ho capito dove sta il problema ma non riesco a creare il ciclo.

    Con questa query:
    select date_format(data_inizio,"%d/%m") as inizio, date_format(data_fine,"%d/%m") as fine,
    prezzo_singola,prezzo_doppia,
    count(prezzo_singola ) as occorrenze
    from prezzi_info group by prezzo_singola order by prezzo_singola;

    mi recupero le occorrenze di ciascun prezzo ma non riesco poi a ciclarle nel mio codice.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Sicuramente il problema è nell'if e nell'incremento di $rowsp ma come lo risolvo?

    Se i prezzi uguali sono al massimo due ottengo la tabella corretta.


    Quando invece i prezzi uguali sono ad esempio tre ottengo:

  9. #9
    Il problema è che dovresti stampare il valore corretto di rowspan in anticipo, mentre tu lo conosci man a mano che scorri l'array (e lo incrementi quindi credo che ti stampi sempre rowspan="2").

    Prova questa soluzione (dovrebbe funzionare).Innanzitutto per comodità ho definito delle funzioni che mi restituiscono la riga della tabella:
    Codice PHP:
    function rowSpanin($arr){
    return 
    '<tr> 
             <td>'
    .$arr['data'].'</td>
             <td rowspan="'
    .$arr['row'].'">'.$arr['prezzo'].'</td>
            </tr>'
    ;
    }
    function 
    rowSpaned($arr){
    return 
    '<tr><td>'.$arr['data'].'</td></tr>';
    }

    function 
    row($arr){
    return 
    '<tr><td>'.$arr['data'].'</td>
                <td>'
    .$arr['prezzo'].'</td>
            </tr>'
    ;

    Poi dopo che ti sei salvato l'array con tutte le righe estratte dal database devi leggerlo e contare quanti sono i prezzi uguali:
    Codice PHP:
    $row=1;
    $old='';
    foreach(
    $resDati AS $key => $value) {
    if (
    $value['prezzo']==$old$row++;
    else {
        for (
    $i=$key-1;$i>=$key-$row && $key>0;--$i)
        
    $resDati[$i]['row']=$row;
        
    $row=1;
        }
    $old=$value['prezzo'];
    }
    for (
    $i=$key;$i>$key-$row;--$i)
        
    $resDati[$i]['row']=$row;
    //print_r($resDati); 
    infine ti stampi (tra i tag <table>) le varie righe:
    Codice PHP:
    $tmp 0;
    $table='';
    foreach(
    $arr AS $value) {
        if (
    $value['row']>1) {
            if (
    $value['row']!=$tmp) {
                    
    $table.= rowSpanin($value);
            } else 
    $table.= rowSpaned($value);
        }else 
    $table.= row($value);
      
    $tmp $value['row'];
    }
    echo 
    $table
    Se poi volessi aggiungere un'altra colonna e gestirne il rowspan credo però che andrebbe rivista la costruzione della tabella
    dA .. foto di viaggio
    L'esperienza è il tipo di insegnante più difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ciao anakin. Innanzitutto ti ringrazio per l'enorme disponibilità che stai avendo.
    Dopo che mi hai fatto tutto il lavoro mi vergogno pure un pò a chiederti un ulteriore aiuto ma sto sbagliando qualcosa nell'adattamento alla mia tabella.

    Codice PHP:
    function rowSpanin($arr){ 
    return 
    '<tr> 
             <td>'
    .$arr['inizio'].'</td> 
             <td>'
    .$arr['fine'].'</td>
             <td rowspan="'
    .$arr['row'].'">'.$arr['prezzo_singola'].'</td>
             <td rowspan="'
    .$arr['row'].'">'.$arr['prezzo_doppia'].'</td> 
            </tr>'


    function 
    rowSpaned($arr){ 
    return 
    '<tr><td>'.$arr['inizio'].'</td>
                <td>'
    .$arr['fine'].'</td>
                <td>'
    .$arr['prezzo_singola'].'</td>
                <td>'
    .$arr['prezzo_doppia'].'</td>
            </tr>'



    function 
    row($arr){ 
    return 
    '<tr><td>'.$arr['inizio'].'</td>
                <td>'
    .$arr['fine'].'</td> 
                <td>'
    .$arr['prezzo_singola'].'</td>
                <td>'
    .$arr['prezzo_doppia'].'</td>             
            </tr>'

    }


    $conn mysql_connect("localhost","root");
    mysql_select_db("isolegemelle");

    $query mysql_query("select date_format(data_inizio,\"%d/%m\") as inizio, date_format(data_fine,\"%d/%m\") as fine,
    prezzo_singola,prezzo_doppia from prezzi_info 
    where idstrutt = 1 order by prezzo_singola"
    );

    while (
    $resDati[] = mysql_fetch_array($query)) ;

    $row=1
    $old=''
    foreach(
    $resDati AS $key => $value) { 
    if (
    $value['prezzo_singola']==$old$row++; 
    else { 
        for (
    $i=$key-1;$i>=$key-$row && $key>0;--$i
        
    $resDati[$i]['row']=$row
        
    $row=1
        } 
    $old=$value['prezzo_singola']; 

    for (
    $i=$key;$i>$key-$row;--$i
        
    $resDati[$i]['row']=$row
    //print_r($resDati);

    $tmp 0
    $table=''
    foreach(
    $resDati AS $value) { 
        if (
    $value['row']>1) { 
            if (
    $value['row']!=$tmp) { 
                    
    $table.= rowSpanin($value); 
            } else 
    $table.= rowSpaned($value); 
        }else 
    $table.= row($value); 
      
    $tmp $value['row']; 


    echo 
    "<table border=\"1\">"
    while (
    $resDati[] = mysql_fetch_array($query)) ; 
    echo 
    $table;
    echo 
    "</table>";
    ?> 
    Potresti dirmi dov'è che commetto gli errori?
    In fase di visualizzazione ciò che ottengo è questo:
    Immagini allegate Immagini allegate

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.