Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Dividere i risultati di una query per data

    Salve a tutti,
    ho una lista di contratti tra le cui opzioni è presente un campo data del tipo "date". Attualmente i contratti vengono estratti e visualizzati in un unica pagina tutti di seguito ordinati per il valore di inserimento "id", ma vorrei che ci fosse una divisione (una riga magari con la data ) tra un giorno e l'altro..non so se sono stato chiaro ma spero possiate aiutarmi a risolvere. Per qualsiasi informazione aggiuntiva sono a vostra disposizione.
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2014
    residenza
    Rome
    Messaggi
    8
    Ciao, se ho capito bene hai bisogno di ordinarli per data e dividere i contratti a livello visivo con una linea.

    Per quanto riguarda la query basta fare un order by date in modo da ordinarli per data; mentre per quanto riguarda la stampa controlli ad ogni contratto se la data è differente oppure no. Se è differente dalla precedente stampi un divisore, altrimenti prosegui.

  3. #3
    Non sono proprio esperto di php... potresti farmi un esempio anche banale?
    Giusto per capire la sintassi...grazie.
    Ultima modifica di fscotto74; 12-05-2014 a 18:00

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2014
    residenza
    Rome
    Messaggi
    8
    Allora, supponiamo che abbiamo il seguente array di dati prelevati dal DB:
    Codice PHP:
    $contratti = array(array('id_contratto'=>1,'data_contratto'=>'12-04-2014'),
                                    array(
    'id_contratto'=>2,'data_contratto'=>'12-04-2014'),
                                    array(
    'id_contratto'=>3,'data_contratto'=>'15-04-2014'),
                                    array(
    'id_contratto'=>4,'data_contratto'=>'18-04-2014'),
                                    array(
    'id_contratto'=>5,'data_contratto'=>'18-04-2014'),
                                    array(
    'id_contratto'=>6,'data_contratto'=>'27-04-2014'),
                                    array(
    'id_contratto'=>7,'data_contratto'=>'03-05-2014'),
                                    array(
    'id_contratto'=>8,'data_contratto'=>'03-05-2014'),
                                   ); 
    Dobbiamo fare un ciclo che ci permetta di scorrere questo array, confrontare le date ed eventualmente stampare li separatore. Prima del ciclo, però, inizializziamo una vcariabile per controllare la data.
    Vediamo come fare:
    Codice PHP:
    $controllo_data ''//La setto come vuota, ma puoi settarla anche come 'pippo'
    foreach($contratti as $contratto){
        
    //controllo se la data è uguale alla precedente o se è differente dal valore inizializzato
        //per distinguere il primo record
        
    if($controllo_data == '') {
            
    //Setto la data da controllare
            
    $controllo_data $contratto['data_contratto'];
            
           
    //Qui stampo quello che devo senza problemi, è il primo record che cicliamo
        
    }
        elseif(
    $contratto['data_contratto'] == $controllo_data){
            
    //Stampo quello che devo senza problemi, la data è la stessa
        
    }
        else {
           
    //Qui avviene il cambio data. Settiamo la nuova data come controllo
           
    $controllo_data $contratto['data_contratto'];
           
    //Stampo il divisore qui es. "echo '</hr>';"
           //Stampo i dati che devo stampare e continuo
        
    }

    Quindi, per esempio, uscirà così:
    ------------------
    | ID | Data |
    ------------------
    | 1 | 12-04-2014 |
    | 2 | 12-04-2014 |
    ------------------ <<< divisore
    | 3 | 15-04-2014 |
    ------------------ <<< divisore
    | 4 | 18-04-2014 |
    | 5 | 18-04-2014 |
    ------------------ <<< divisore
    | 6 | 27-04-2014 |
    ------------------ <<< divisore
    | 7 | 03-05-2014 |
    | 8 | 03-05-2014 |
    ------------------
    Questo è un esempio banale banale. Bisogna prendere in considerazione se le date siano timestamp o che comprendano anche dati aggiuntivi oltre al giorno, mese e anno. Se dovessero contenere anche ulteriori dati, devi trasformarlo in data semplice (ad es. gg-mm-aaa), in modo tale da poterla dividere per giorni. Questa conversione si fa così:
    Codice PHP:
    $data date('d-m-Y'strtotime($data_da_convertire)); 
    Per altri dubbi chiedi pure; non esitare

  5. #5
    Grazie! mi hai praticamente fatto un mini-corso di php...ti devo un favore. Ora mi metto al lavoro per adattarlo al mio codice, ti aggiorno qui. Grazie ancora

  6. #6
    Ho fatto qualche prova ma non riesco a farlo funzionare.
    In particolare mi viene restituito un errore "Warning: Illegal string offset" che non riesco a correggere.
    Ma in ogni caso non riesco ad adattarlo alla mia situazione. Se puoi aiutarmi te ne sarei grato...sono a tua disposizione per qualsiasi info.

    Ti metto qui il codice
    codice:
    <?php 
    
        require 'Connections/connetti.php';
    
        mysql_select_db($database_td, $td);
    
        // preparo la query
        $query = 'SELECT * FROM demo ORDER BY data DESC';
        
        // invio la query
        $result = mysql_query($query);
     
        // controllo l'esito
        if (!$result) {
            die("Errore nella query $query: " . mysql_error());
        }    
        { ?>
        
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="robots" content="noindex,nofollow">
        <link href="css/stile.css" rel="stylesheet" type="text/css">
        <title>Gestione Contratti</title>
        </head>
        
        <body>
        <div id="page-wrap">   
        
        <table>    
        <thead>
        <tr>
        <td colspan="14" bgcolor="#FFFFFF"><div align="center"><img class="flex" src="logo.png">
        <?php include('menu.inc.php'); ?></div>
        </td>
        </tr>        
        <tr>
          <th>Data</th>
          <th>N.</th>
          <th>Lang</th>
          <th>Auto</th>
          <th>Nome Cognome</th>
          <th>Test Drive</th>
          <th>Doc</th>
          <th>Vid</th>
          <th>Pas</th>
          <th>Paga</th>
          <th>Prz</th>
          <th>Ant</th>
          <th>Saldo</th>
          <th>Gestione</th>
      </tr>
      </thead>
      
      <?php } 
        // Preparo il valore del colore alternativo delle righe prima del while
        $i=1;
        //Variabile per controllare la data
        $controllo_data = '';
        
        while ($row = mysql_fetch_assoc($result))
        {        
            $data = htmlspecialchars($row['data']);
            $lingua = htmlspecialchars($row['lingua']);
            $id = htmlspecialchars($row['id']);        
            $auto = htmlspecialchars($row['auto']);
            $nome = htmlspecialchars($row['nome']);
            $cognome = htmlspecialchars($row['cognome']);
            $telefono = htmlspecialchars($row['telefono']);
            $email = htmlspecialchars($row['email']);
            $testdrive = htmlspecialchars($row['testdrive']);
            $documento = htmlspecialchars($row['documento']);
            $docnro = htmlspecialchars($row['docnro']);
            $video = htmlspecialchars($row['video']);
            $passeggero = htmlspecialchars($row['passeggero']);
            $pagamento = htmlspecialchars($row['pagamento']);
            $prezzo = htmlspecialchars($row['prezzo']);
            $anticipo = htmlspecialchars($row['anticipo']);
     
            // Preparo il link per la modifica dei dati del record
            $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];            
            
            if($i%2 == 1)$color="#eee"; //stampo il primo colore
            else $color="#fff"; //altrimenti stampo il secondo colore
            
            
                
            { ?>
            
            <tr bgcolor="<?= $color ?>">
            <td><? echo $data; ?></td>
            <td><? echo $id; ?></td>
            <td><? if ($lingua == '') echo '/'; else echo $lingua; ?></td>
            <td><? echo $auto; ?></td>
            <td><? echo $nome, $cognome; ?></td>
            <td><? echo $testdrive; ?></td>
            <td><? echo $documento; ?></td>
            <td><? if ($video == 'SI') echo 'SI'; else echo 'NO'; ?></td>
            <td><? if ($passeggero == 'SI') echo 'SI'; else echo 'NO'; ?></td>
            <td><? echo $pagamento; ?></td>
            <td><? echo $prezzo; ?></td>
            <td><? if ($anticipo == '') echo '/'; else echo $anticipo; ?></td>
            <td><? $saldo = ($prezzo-$anticipo); echo $saldo; ?></td>
            <td><a href="<?= $link ?>"><img src="edit.png" border="0" title="modifica" /></a>
            
            <? if ($lingua == 'ita') $stampa="stampa"; else $stampa="print"; ?>
            
            <a href="<?=$stampa?>.php?id=<?=$id?>&nome=<?=$nome?>&cognome=<?=$cognome?>&auto=<?=$auto?>&documento=<?=$documento?>&docnro=<?=$docnro?>&prezzo=<?=$prezzo?>&pagamento=<?=$pagamento?>&testdrive=<?=$testdrive?>&video=<?=$video?>&passeggero=<?=$passeggero?>" target="_blank"><img src="print.png" border="0" title="stampa" /></a></td></tr>
           
           <?php }
            
            $i++;        
            
            }
            
            ?>
        <tr>
          <th colspan="14" align="center">Gestione contratti</th>
           </tr>      
        </table>
        </div> 
         
        </body>
        </html>
        
        <?
     
        // libero la memoria di PHP occupata dai record estratti con la SELECT
        mysql_free_result($result);
     
        // chiudo la connessione a MySQL
        mysql_close(); 
        
        ?>

    Ripeto che sono alle prime armi quindi ben vengano anche eventuali osservazioni per indirizzarmi verso una migliore pulizia del codice per evitare errori e incompatibilità..anche se così com'è funziona tutto bene. Mi manca proprio quella divisione dei record per data...
    Grazie ancora
    Ultima modifica di fscotto74; 14-05-2014 a 15:54

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Se dicessi anche su quale riga hai il warning sarebbe meglio.

    Al tuo posto invece di <?= ... ?> io userei <?php echo ... ?>

  8. #8
    Grazie per la dritta sul codice. Per quanto riguarda il warning credo di aver risolto da solo. Ora riesco almeno a dividere le date. Con calma sto provando ad adattarlo per far stampare la riga in html con i dati dentro. Spero di riuscirci e di postarvi la soluzione per verificarla insieme..intanto ancora grazie

  9. #9
    Ok...allora ci siamo quasi

    Ho integrato il codice per la stampa della riga (tr) alternativa al cambio data.
    Ora funziona e mi stampa la riga alternativa al cambio data ma con due problemi:


    1. Non viene stampato il primo record dell'elenco
    2. Prima dell'integrazione avevo un ciclo di WHILE per il controllo del colore della riga che ora non funge più...in pratica mi stampa sempre il primo colore.

    Di seguito il codice:

    codice:
    <?php 
    
        require 'Connections/connetti.php';
    
    
        mysql_select_db($database_td, $td);
    
    
        // preparo la query
        $query = 'SELECT * FROM td_contract ORDER BY data DESC';
        
        // invio la query
        $result = mysql_query($query);
     
        // controllo l'esito
        if (!$result) {
            die("Errore nella query $query: " . mysql_error());
        }    
        { ?>
        
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="robots" content="noindex,nofollow">
        <link href="css/stile.css" rel="stylesheet" type="text/css">
        <title>Gestione Contratti</title>
        </head>
        
        <body>
        <div id="page-wrap">   
        
        <table>    
        <thead>
        <tr>
        <td colspan="14" bgcolor="#FFFFFF"><div align="center"><img class="flex" src="logo.png">
        <?php include('menu.inc.php'); ?></div>
        </td>
        </tr>        
        <tr>
          <th>Data</th>
          <th>N.</th>
          <th>Lang</th>
          <th>Auto</th>
          <th>Nome Cognome</th>
          <th>Test Drive</th>
          <th>Doc</th>
          <th>Vid</th>
          <th>Pas</th>
          <th>Paga</th>
          <th>Prz</th>
          <th>Ant</th>
          <th>Saldo</th>
          <th>Gestione</th>
      </tr>
      </thead>
      
      <?php } 
        // Preparo il valore del colore alternativo delle righe prima del while
        $i=1;
        //Variabile per controllare la data
        $controllo_data = '';    
        
            while ($row = mysql_fetch_assoc($result))
        {        
            $data = htmlspecialchars($row['data']);
            $lingua = htmlspecialchars($row['lingua']);
            $id = htmlspecialchars($row['id']);        
            $auto = htmlspecialchars($row['auto']);
            $nome = htmlspecialchars($row['nome']);
            $cognome = htmlspecialchars($row['cognome']);
            $telefono = htmlspecialchars($row['telefono']);
            $email = htmlspecialchars($row['email']);
            $testdrive = htmlspecialchars($row['testdrive']);
            $documento = htmlspecialchars($row['documento']);
            $docnro = htmlspecialchars($row['docnro']);
            $video = htmlspecialchars($row['video']);
            $passeggero = htmlspecialchars($row['passeggero']);
            $pagamento = htmlspecialchars($row['pagamento']);
            $prezzo = htmlspecialchars($row['prezzo']);
            $anticipo = htmlspecialchars($row['anticipo']);
     
            // Preparo il link per la modifica dei dati del record
            $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];            
                
            { 
            
            if($controllo_data == '') {
            //Setto la data da controllare
            $controllo_data = $row['data'];
             }
                elseif($row['data'] == $controllo_data){
            //Stampo quello che devo senza problemi, la data è la stessa
            
            { 
            if($i%2 == 1)$color="#eee"; //stampo il primo colore
            else $color="#fff"; //altrimenti stampo il secondo colore
            ?>    
            
            
            <tr bgcolor="<?= $color ?>">
            <td><? echo $data; ?></td>
            <td><? echo $id; ?></td>
            <td><? if ($lingua == '') echo '/'; else echo $lingua; ?></td>
            <td><? echo $auto; ?></td>
            <td><? echo $nome, $cognome; ?></td>
            <td><? echo $testdrive; ?></td>
            <td><? echo $documento; ?></td>
            <td><? if ($video == 'SI') echo 'SI'; else echo 'NO'; ?></td>
            <td><? if ($passeggero == 'SI') echo 'SI'; else echo 'NO'; ?></td>
            <td><? echo $pagamento; ?></td>
            <td><? echo $prezzo; ?></td>
            <td><? if ($anticipo == '') echo '/'; else echo $anticipo; ?></td>
            <td><? $saldo = ($prezzo-$anticipo); echo $saldo; ?></td>
            <td><a href="<?= $link ?>"><img src="edit.png" border="0" title="modifica" /></a>
            
            <? if ($lingua == 'ita') $stampa="stampa"; else $stampa="print"; ?>
            
            <a href="<?=$stampa?>.php?id=<?=$id?>&nome=<?=$nome?>&cognome=<?=$cognome?>&auto=<?=$auto?>&documento=<?=$documento?>&docnro=<?=$docnro?>&prezzo=<?=$prezzo?>&pagamento=<?=$pagamento?>&testdrive=<?=$testdrive?>&video=<?=$video?>&passeggero=<?=$passeggero?>" target="_blank"><img src="print.png" border="0" title="stampa" /></a></td></tr>
           <?php }
            }
            else {
           //Qui avviene il cambio data. Settiamo la nuova data come controllo
           $controllo_data = $row['data'];
           //Stampo i dati che devo stampare e continuo
           { ?>
           
           <tr>
           <td colspan="15" bgcolor="#FFFFFF">Risultati per il giorno <?php echo $data = date('d-m-Y', strtotime($data)); ?></td>
           </tr>
           
           <?php 
           }
           }
           }
            
            $i++;        
            
            }
            
            ?>
        <tr>
          <th colspan="14" align="center">Gestione contratti</th>
           </tr>      
        </table>
        </div> 
         </body>
        </html>
        
        <?
     
        // libero la memoria di PHP occupata dai record estratti con la SELECT
        mysql_free_result($result);
     
        // chiudo la connessione a MySQL
        mysql_close(); 
        
        ?>
    Ultima modifica di fscotto74; 14-05-2014 a 18:05

  10. #10
    Mi rispondo da solo avendo risolto uno dei due problemi.
    Ho risolto la stampa del colore alternato per le righe ma rimane il problema della stampa del primo record. Stampa tutto fino alla fine tranne il primo record...o meglio l'ultimo inserito.

    Metto qui il codice modificato.

    codice:
    <?php 
    
        require 'Connections/connetti.php';
        
        mysql_select_db($database_td, $td);
    
    
        // preparo la query
        $query = 'SELECT * FROM td_contract ORDER BY data DESC';
        
        // invio la query
        $result = mysql_query($query);
     
        // controllo l'esito
        if (!$result) {
            die("Errore nella query $query: " . mysql_error());
        }    
        { ?>
        
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="robots" content="noindex,nofollow">
        <link href="css/stile.css" rel="stylesheet" type="text/css">
        <title>Gestione Contratti</title>
        </head>
        
        <body>
        <div id="page-wrap">   
        
        <table>    
        <thead>
        <tr>
        <td colspan="14" bgcolor="#fff"><div align="center"><img class="flex" src="logo.png"><?php include('menu.inc.php'); ?></div></td>
        </tr>        
        <tr>
          <th>Data</th>
          <th>N.</th>
          <th>Lang</th>
          <th>Auto</th>
          <th>Nome Cognome</th>
          <th>Test Drive</th>
          <th>Doc</th>
          <th>Vid</th>
          <th>Pas</th>
          <th>Paga</th>
          <th>Prz</th>
          <th>Ant</th>
          <th>Saldo</th>
          <th>Gestione</th>
      </tr>
      </thead>
      
      <?php } 
        // Preparo il valore del colore alternativo delle righe prima del while
        $i=1;
        //Variabile per controllare la data
        $controllo_data = '';    
        
            while ($row = mysql_fetch_assoc($result))
        {        
            $data = htmlspecialchars($row['data']);
            $lingua = htmlspecialchars($row['lingua']);
            $id = htmlspecialchars($row['id']);        
            $auto = htmlspecialchars($row['auto']);
            $nome = htmlspecialchars($row['nome']);
            $cognome = htmlspecialchars($row['cognome']);
            $telefono = htmlspecialchars($row['telefono']);
            $email = htmlspecialchars($row['email']);
            $testdrive = htmlspecialchars($row['testdrive']);
            $documento = htmlspecialchars($row['documento']);
            $docnro = htmlspecialchars($row['docnro']);
            $video = htmlspecialchars($row['video']);
            $passeggero = htmlspecialchars($row['passeggero']);
            $pagamento = htmlspecialchars($row['pagamento']);
            $prezzo = htmlspecialchars($row['prezzo']);
            $anticipo = htmlspecialchars($row['anticipo']);
     
            // Preparo il link per la modifica dei dati del record
            $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];            
                
            { 
            
            if($controllo_data == '') {
            //Setto la data da controllare
            $controllo_data = $row['data'];
             }
                elseif($row['data'] == $controllo_data){
            //Stampo quello che devo senza problemi, la data è la stessa        
            
            //controllo il valore del colore. Se è uno stampo il primo
            if($i%2 == 1)$color="#eee"; 
            else $color="#fff"; //altrimenti stampo il secondo colore
            
            { ?>        
            
            <tr bgcolor="<?php echo $color; ?>">
            <td><? echo $data; ?></td>
            <td><? echo $id; ?></td>
            <td><? if ($lingua == '') echo '/'; else echo $lingua; ?></td>
            <td><? echo $auto; ?></td>
            <td><? echo $nome, $cognome; ?></td>
            <td><? echo $testdrive; ?></td>
            <td><? echo $documento; ?></td>
            <td><? if ($video == 'SI') echo 'SI'; else echo 'NO'; ?></td>
            <td><? if ($passeggero == 'SI') echo 'SI'; else echo 'NO'; ?></td>
            <td><? echo $pagamento; ?></td>
            <td><? echo $prezzo; ?></td>
            <td><? if ($anticipo == '') echo '/'; else echo $anticipo; ?></td>
            <td><? $saldo = ($prezzo-$anticipo); echo $saldo; ?></td>
            <td><a href="<?php echo $link; ?>"><img src="edit.png" border="0" title="modifica" /></a>
            
            <? if ($lingua == 'ita') $stampa="stampa"; else $stampa="print"; ?>
            
            <a href="<?=$stampa?>.php?id=<?=$id?>&nome=<?=$nome?>&cognome=<?=$cognome?>&auto=<?=$auto?>&documento=<?=$documento?>&docnro=<?=$docnro?>&prezzo=<?=$prezzo?>&pagamento=<?=$pagamento?>&testdrive=<?=$testdrive?>&video=<?=$video?>&passeggero=<?=$passeggero?>" target="_blank"><img src="print.png" border="0" title="stampa" /></a></td></tr>
           
            <?php }
            // faccio avanzare il valore che mi serve per il cambio di colore delle righe
            $i++;
            }
                    
            else {
           //Qui avviene il cambio data. Settiamo la nuova data come controllo
           $controllo_data = $row['data'];
           //Stampo i dati che devo stampare e continuo
           { ?>
           
           <tr>
           <td colspan="15" bgcolor="#ff6"><h2>Contratti per il giorno <?php echo $data = date('d-m-Y', strtotime($data)); ?></h2></td>
           </tr>
           
           <?php 
          // faccio avanzare il valore che mi serve per il cambio di colore delle righe
           $i++;
           }       
           }       
           }
           } ?>
           
           <!-- fine risultati - chiudo la tabella -->
        <tr>
          <th colspan="14" align="center">Gestione contratti</th>
           </tr>      
        </table>
        </div> 
        
        </body>
        </html>
        
        <?
     
        // libero la memoria di PHP occupata dai record estratti con la SELECT
        mysql_free_result($result);
     
        // chiudo la connessione a MySQL
        mysql_close(); 
        
        ?>

Tag per questa discussione

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.