Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    Cambiare ordinamento colonne da asc a desc e viceversa.

    Il mio problema è il seguente: ho una tabella con le intestazioni di colonna cliccabili.
    In base all'intestazione cliccata i dati mi vengono ordinati in base a quel campo.
    Fin qui tutto ok.
    Ciò che vorrei realizzare è far sì che cliccando ulteriormente sulla stessa colonna i dati vengano riordinati nel senso opposto, quindi da asc a desc e viceversa.
    E' da un bel pò che mi ci sto sbattendo senza venirne a capo. Immagino che occorra memorizzare l'ordine di visualizzazione magari in una variabile di sessione e, una volta cliccato il campo, eseguire l'ordinamento con la variabile di sessione "opposta" ma non riesco a metterlo in pratica.
    Qualcuno è così gentile da darmi una mano? Grazie.

    Il codice di partenza è questo.
    Codice PHP:
    <?php
    $conn 
    mysql_connect($server,$user,$pass) or die($errConnessione);
    mysql_select_db($database) or die ($errSelezione);
    $query "select idcontatto,cognome,nome,comune,email from contatti where comune = \"Olbia\"";
            
            if (isset(
    $_GET['order']))
            {
            
    $ordinaPer $_GET['order'];
            
    $query .= " ORDER BY ".$ordinaPer." ";
            }
            
            
    $rs mysql_query($query) or die(mysql_error());
            
            
    $num mysql_num_rows($rs);

            if (
    $num == 0)
              echo 
    "<div style=\"text-align:center\">Nessun contatto presente nel comune</div>";
            else
              { 
            
    ?>
            <table border="1">
            <tr>
            <td align="center">[b][url="cartina3.php?order=<?php echo urlencode("]">Cognome[/url][/b]</td>
            <
    td align="center">[b][url="cartina3.php?order=<?php echo urlencode("]">Nome[/url][/b]</td>
            <td align="
    center">[b][url="cartina3.php?order=<?php echo urlencode("]">E-mail[/url][/b]</td>
             </
    tr>
              <?
    php
            
    while($results mysql_fetch_array($rs))
                {
                    echo 
    "<tr>";
                    
    $idcontatto $results['idcontatto'];
                    echo 
    "<td width=\"25%\">$results[cognome]</td>";
                    echo 
    "<td width=\"25%\">$results[nome]</td>";
                    echo 
    "<td width=\"25%\">$results[email]</td>";
                    echo 
    "</tr>";
                } 
    //fine ciclo while
            
    //fine else nel caso ci sia almeno un contatto nel comune
    ?>

  2. #2
    prova un po cosi :

    Codice PHP:

    <?php
    $conn 
    mysql_connect($server,$user,$pass) or die($errConnessione);
    mysql_select_db($database) or die ($errSelezione);
    $query "select idcontatto,cognome,nome,comune,email from contatti where comune = \"Olbia\" order by $_GET[ordertipo] $_GET[order]";



            
    $rs mysql_query($query) or die(mysql_error());

            
    $num mysql_num_rows($rs);

            if (
    $num == 0)
              echo 
    "<div style=\"text-align:center\">Nessun contatto presente nel comune</div>";
            else
              {

             if(
    $_GET[order]=="asc"){$order2 "desc"}
             if(
    $_GET[order]=="desc"){$order2 "asc"}
            
    ?>
            <table border="1">
            <tr>
            <td align="center">[b][url="cartina3.php?ordertipo=<?php echo urlencode("]">Cognome[/url][/b]</td>
            <
    td align="center">[b][url="cartina3.php?ordertipo=<?php echo urlencode("]">Nome[/url][/b]</td>
            <td align="
    center">[b][url="cartina3.php?ordertipo=<?php echo urlencode("]">E-mail[/url][/b]</td>
             </
    tr>
              <?
    php
            
    while($results mysql_fetch_array($rs))
                {
                    echo 
    "<tr>";
                    
    $idcontatto $results['idcontatto'];
                    echo 
    "<td width=\"25%\">$results[cognome]</td>";
                    echo 
    "<td width=\"25%\">$results[nome]</td>";
                    echo 
    "<td width=\"25%\">$results[email]</td>";
                    echo 
    "</tr>";
                } 
    //fine ciclo while
            
    //fine else nel caso ci sia almeno un contatto nel comune
    ?>

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Grazie mille stefano. Provo e ti faccio sapere.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao Stefano.
    Ho provato lo script che mi hai dato. C'era qualche piccolo errore dovuto sicuramente al fatto che non avevi ricreato le condizioni affinchè potessi parsarlo.
    Comunque mi sei stato di grande aiuto. Mi stavo complicando la vita con le sessioni quando invece con queste due righe hai risolto il mio problema.
    if($_GET[order]=="asc"){$order2 = "desc"}
    if($_GET[order]=="desc"){$order2 = "asc"}

    La soluzione migliore è spesso la più banale. Capoccione io a non averci pensato.

    Ora posto il codice funzionante, nel caso possa essere d'aiuto a qualcun altro.

    Codice PHP:
    <?php 
    $conn 
    mysql_connect($server,$user,$pass) or die($errConnessione); 
    mysql_select_db($database) or die ($errSelezione); 

    $query "select idcontatto,cognome,nome,comune,email from contatti where comune = \"Olbia\" "
    $rs mysql_query($query) or die(mysql_error()); 
    $num mysql_num_rows($rs); 

    if (
    $num == 0
        echo 
    "<div style=\"text-align:center\">Nessun contatto presente nel comune</div>"
            else 
              { 
                 if(empty(
    $_GET['ordercampo'])) 
                 
    $_GET['ordercampo'] = "idcontatto";
             
                 if(empty(
    $_GET['order'])) 
                 
    $_GET['order'] = "asc";
             
                 if(
    $_GET['order']=="asc") {$ordinaVerso "desc";} 
                 if(
    $_GET['order']=="desc") {$ordinaVerso "asc";} 
                 
    $query "select idcontatto,cognome,nome,comune,email from contatti where comune = \"Olbia\" order by $_GET[ordercampo] $ordinaVerso ";
                 
    $rs mysql_query($query) or die(mysql_error()); 
            
    ?> 
            <table border="1"> 
            <tr> 
            <td align="center">[b][url="cartina3.php?ordercampo=<?php echo 'cognome' ?>&order=<?php echo $ordinaVerso ?>"]Cognome[/url][/b]</td> 
            <td align="center">[b][url="cartina3.php?ordercampo=<?php echo 'nome' ?>&order=<?php echo $ordinaVerso ?>"]Nome[/url][/b]</td> 
            <td align="center">[b][url="cartina3.php?ordercampo=<?php echo 'email' ?>&order=<?php echo $ordinaVerso ?>"]E-mail[/url][/b]</td> 
             </tr> 
              <?php 
            
    while($results mysql_fetch_array($rs)) 
                { 
                    echo 
    "<tr>"
                    
    $idcontatto $results['idcontatto']; 
                    echo 
    "<td width=\"25%\">$results[cognome]</td>"
                    echo 
    "<td width=\"25%\">$results[nome]</td>"
                    echo 
    "<td width=\"25%\">$results[email]</td>"
                    echo 
    "</tr>"
                } 
    //fine ciclo while 
            
    //fine else nel caso ci sia almeno un contatto nel comune 
    ?>
    Vorrei chiedere a te e anche agli altri un'ultima spiegazione:

    Situazione iniziale. Non è stata inviata la querystring. Di conseguenza io imposto i miei parametri per l'esecuzione della query nel seguente modo: campo in base al quale effettuare l'ordinamento idcontatto. Tipo ordinamento asc.
    Una volta eseguiti questi due if viene eseguito un ulteriore if per verificare se l'ordinamento è crescente o descescente e assegnare quindi quello inverso.


    Dunque i miei parametri di ordinamento della query portano a visualizzarmi una tabella in base sì a quel campo ma l'ordinamento avviene in maniera decrescente.

    Scusate se mi sono dilungato. Arrivo al punto: sarebbe possibile ordinare inizialmente la tabella in base all'identificativo del record in ordine crescente però facendo in modo che cliccando ad esempio sulla colonna nome il primo ordinamento sia in ordine alfabetico crescente e non decrescente?

    Spero di essermi spiegato.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    uppo!

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

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.