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

Discussione: Php - Order By Colonna

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80

    Php - Order By Colonna

    Prendo spunto per iniziare questa nuova discussione da una precedente dove TheMastion aveva aiutato un'altro utente a realizzare una cosa così

    http://javascript.html.it/tutorial/e...25/esempio.htm

    Ossia i titoli delle colonne che permettono l'ordinamento ascendende o discendente.

    Prima di inserire il codice di TheMastion dentro il mio (super incasinatissimo codice) volevo un vostro aiuto e supporto.

    Per iniziare vi posto il codice di TheMastion

    Codice PHP:
    <?php

    INCLUDE('connessione.php');

    if (isset(
    $_GET['field'])) 
    {
        
    $campo $_GET['field'] == "Descrizione" "Descrizione" "Codice_Materiale";

    else 
    {
        
    $campo "Codice_Materiale";
    }
    if (isset(
    $_GET['sort'])) 
    {
        
    $verso $_GET['sort'] == "desc" "DESC" "ASC";

    else 
    {
        
    $verso "ASC";
    }

    $sql="SELECT * from materiale order by {$campo} {$verso} ";
    // seleziona tutti i record della tabella

    $risultato_query=mysql_query($sql,$connessione);
    // controlla il risultato della query attraverso la funzione mysql_query

    $num_righe=mysql_num_rows($risultato_query);
    // restituisce il numero di record ottenuto dalla selezione

    $verso = ($verso == "ASC") ? "desc" "asc";

    echo
    "<table width=\"584\" border=\"0\"cellspacing=\"0\" cellpadding=\"0\">";
    echo
    "<tr> ";
    echo
    "<td width=\"220\" bgcolor=\"#f5f5f5\">[b][url='tuapagina.php?field=Codice_Materiale&sort={$verso}']CODICE MATERIALE[/url][/b]</td>";
    echo
    " <td  width=\"352\" bgcolor=\"#f5f5f5\">[b][url='tuapagina.php?field=Descrizione&sort={$verso}']DESCRIZIONE[/url][/b]</td>";
    echo
    " </tr>";
    echo
    " <tr>";
    echo
    "  <td colspan=\"2\"><div id=\"Layer1\" style=\" height:7em;  overflow: auto;\">";
    echo
    " <table width=\"584\" id=\"table-1\">";

    $i=0;
    while(
    $riga=mysql_fetch_array($risultato_query))
    {
        
    $CodiceMateriale=$riga["Codice_Materiale"];
        
    $Descrizione=$riga["Descrizione"];
        if(
    is_int($i/2))
        {
            
    $color "#c0c0c0";
        }
        else
        {
            
    $color"#ffffff";
        }
        echo
    " <tr> ";
        echo
    " <td width=\"230\" style=\"background:$color\">$CodiceMateriale </td>";
        echo
    "<td width=\"342\" style=\"background:$color\">$Descrizione</td>";
        echo
    "</tr>";
        
    $i++;
    }
    echo
    "</table>";
    echo
    "</div></td>";
    echo
    "</tr>";
    echo
    "</table>";

    ?>
    Il codice mi è sostanzialmente chiaro (forse è un parolone), ossia io mi passo tramite get le variabile per l'order by nella query, e in pratica (e qui viene il problema) io mi ricarico la mia pagina di ricerca, ossia se ho capito bene la pagina di ricerca è unica (nel caso tuapagina.php)

    Ora dove è il mio problema, la query che faccio io è un poco più
    complicata e riceve le informazioni su cui ricercare da POST attraverso un form. Per essere più chiaro io ho la pagina di ricerca ricerca.php dove ho solamente il form, che (tramite campi e checkbox) passa tramite POST i valori delle variabili. Nella pagina ricerca1.php il codice preleva le variabili (si fà i suoi controlli) e poi va a fare una query simile a questa

    Codice PHP:
    if (isset($array_prog1)) 
    {
    if (
    $lav == '0')
        {
            
    $query  "SELECT lavori.NOME, requisiti.IMPORTO_GLOBALE, requisiti.IA, requisiti.IB, requisiti.IC, requisiti.ID, requisiti.IE, requisiti.IF, requisiti.IG,     requisiti.IIIA, requisiti.IIIB, requisiti.IIIC, requisiti.VIA, requisiti.VIB, requisiti.VIII FROM lavori INNER JOIN requisiti ON lavori.ID = requisiti.ID_REQUISITI LEFT JOIN date ON lavori.ID = date.ID_DATE WHERE lavori.PRESTAZIONI_NORMATIVA LIKE '$cprog1' OR '$cprog2' OR '$cprog3' OR '$cprog4' OR '$cprog5' OR '$cprog6'";

            
    $risultato mysqli_query($connessione,$query) or die("Query fallita");
            while (
    $linea mysqli_fetch_array($risultatoMYSQLI_ASSOC)) 
            {                
                
    // adesso controllo le date lavoro per lavoro che mi viene passato dal ciclo while
                
    foreach ($array_unico as $array)
                    {
                        
    // controllo che non debba fare solo la sicurezza
                        
    if (isset ($array))
                        { 
                            foreach (
    $array as $faselavoro)
                                {    
                                    if (isset (
    $faselavoro))
                                        {
                                            
    $nomignolo $linea['NOME'];
                                            
    $fase 'date.FINE_';
                                            
    $fase .= $faselavoro;
                                            
    $dom"SELECT $fase FROM date LEFT JOIN lavori ON date.ID_DATE = lavori.ID WHERE lavori.NOME = '$nomignolo'";
                                            
    $ris mysqli_query($connessione,$dom) or die("Query fallita2");
                                            
    $dataverifica mysqli_fetch_row($ris);
                                            
    // verifico che la data del progetto sia posteriore a quella del bando
                                            
    if ($dataverifica [0] < $DATA)
                                                {                                
                                                    
    $errore '1';
                                                    
    // se la condizione non Ã¨ soddisfatta interrompo il ciclo e passo al successivo gruppo di fasi lavoro
                                                    
    break;
                                                }
                                                else
                                                {                                
                                                    
    $errore '0';
                                                    
    // se la condizione Ã¨ soddisfatta continuo il ciclo
                                                
    }
                                        }
                                }
                        
                            
    // se invece la condizione Ã¨ soddisfatta mi stampo il risultato e esco dal ciclo perchè almeno una delle richieste Ã¨ stata soddisfatta
                            
                            
    if ($errore == '0')
                                {    
                                    
    extract ($linea);
                                    echo  
    "<td>$NOME</td>";
                                    echo  
    "<td>$IMPORTO_GLOBALE</td>";
                                    echo  
    "<td>$IA</td>";
                                    echo  
    "<td>$IB</td>";
                                    echo  
    "<td>$IC</td>";
                                    echo  
    "<td>$ID</td>";
                                    echo  
    "<td>$IE</td>";
                                    echo  
    "<td>$IF</td>";
                                    echo  
    "<td>$IG</td>";
                                    echo  
    "<td>$IIIA</td>";
                                    echo  
    "<td>$IIIB</td>";
                                    echo  
    "<td>$IIIC</td>";
                                    echo  
    "<td>$VIA</td>";
                                    echo  
    "<td>$VIB</td>";
                                    echo  
    "<td>$VIII</td>";
                                    echo 
    "<td><center><input name=\"nome[]\" type=\"checkbox\" value=\"$NOME\" /></td></center</tr>";
                                    
                                    break;
                                }
                        }
                        
                        
    // ovviamente se non stampo niente procedo con la ricerca nell'altro gruppo di richieste
                    
    }
                
            } 
        } 
    Ora se io chiedo di ricaricarmi la stessa pagina in ordine ascendente su una colonna lui (PHP per gli amici) non troverà più i valori delle variabili del post vero? Se è come penso io (e non sono sicuro) come potrei fare a fargli passare le variabili per la ricerca. Io ci ho pensato e l'unica soluzione che mi viene in mente è di non far ricaricare la pagina ricerca1.php ma di indirizzare il tutto a una nuova pagina ricerca2.php dove io le variabili per la ricerca le recupero attraverso delle sessioni tipo

    Codice PHP:
    if (isset ($prog))
        {
    $_SESSION['prog']= $array_passaggio;}
        if (isset (
    $array_unico))
        {
    $_SESSION['unico']= $array_unico;}
        if (isset (
    $lav))
        {
    $_SESSION['lav']= $lav;}
        if (isset (
    $data))
        {
    $_SESSION['data']= $data;} 
    Come vi sembra come metodo, e le variabili via GET come si passano dalla pagina di invio?

  2. #2
    secondo me ti convienere usare GET invece che POST, cosi puoi appendere le variabili che ti servono ad un url.....ti faccio un esempio:

    mettiamo che nella tua pagina hai dei risultati ordinati in modo crescente rispetto ad una colonna....quindi a questa pagina verra passato come parametro la colonna da ordinare e il tipo di ordinamento (ORDER BY colonna ASC/DESC)

    mettiamo il caso che questi dati siano prelevati dalla pagina php in questione tramite
    Codice PHP:
    $parametro_di_ordinamento$_GET["parametro_di_ordinamento"];  //la colonna
    $direzione $_GET["direzione"];                            // ASC o DESC 
    nella pagina ricerca1.php puoi inserire un link alla stessa pagina, modificando i parametri passati tramite GET... x ex per ordinare una colonna in modo decrescente inserisci

    Codice PHP:
    [url="ricerca1.php?parametro_di_ordinamento=$parametro_di_ordinamento&direzione=DESC"]decrescente[/url
    in modo crescente

    Codice PHP:
    [url="ricerca1.php?parametro_di_ordinamento=$parametro_di_ordinamento&direzione=ASC"]decrescente[/url
    V.I.S.T.A. --> Virus Inside, Switch To Apple

  3. #3
    Ed usare un input di tipo hidden?
    Permette di passare quali e quante variabili vuoi da una pagina all'altra.

    Sennò vanno bene le altre due soluzioni indicate: get oppure session.

    Ne esisterebbero altre quali i cookies, ma quelle citate sono più che sufficienti.
    Tecnolgie per l'arte.
    Arti per la tecnologia.
    softhare

  4. #4
    si anche i campi input hidden vanno bene...non li uso mai ma vanno bene...
    V.I.S.T.A. --> Virus Inside, Switch To Apple

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Innanzitutto e come sempre grazie a tutti e due.
    Quindi avevo interpretato bene, ossia io mi devo ricreare una pagina nuova a cui ripasso le variabili o tramite get o tramite session, oppure è meglio che da form anziche con il POST le variabili le passo via GET???

  6. #6
    in casi analoghi passo da pagina a pagina le variabili:
    - stringa di ricerca
    - campo su cui ordinare i risultati
    - flag asc/desc
    - numero di risultati per pagina
    - numero di pagina o di recdord iniziale

    Il get non è sempre appropriato per due motivi: l'utente può leggerlo e modificarlo troppo facilmente, inotre ha un limite al numero di caratteri che può trasmettere.

    Scelgo il get/post oppure le session a seconda del contesto, di quante altre variabili devo passare, se una session è già attiva, etc.
    Tecnolgie per l'arte.
    Arti per la tecnologia.
    softhare

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Scusate ancora... Come avrete capito io non sono davvero una cima (per non dire che sono una schiappa) in programmazione.

    In pratica la mia pagina di ricerca1.php inizia così

    Codice PHP:
    $preliminare $_GET['PRELIMINARE'];
    $verifica1 $_GET['VERIFICA1'];
    $definitivo $_GET['DEFINITIVO'];
    $verifica2 $_GET['VERIFICA2'];
    $esecutivo $_GET['ESECUTIVO'];
    $dir $_GET['DIR'];
    $sic $_GET['SIC'];
    $lav $_GET['tuttiilavori'];
    $data $_GET['data']; 
    Ossia con un buon numero di variabili (probabilmente con il passare del tempo riuscitò a ridurle magari passando solamente 4 Array).
    Domande:

    1) Io so che tramite GET c'è un limite alla lunghezza della stringa che si può passare, in sostanza 9 variabili sono troppe per GET?

    2) Se adesso io mi ricarico la pagina con il nuovo ordinamento, il programma dove cavolo li va a pescare i parametri di cui sopra?

    3) Credo che io alla fine della ricerca devo ripassare comunque i 9 parametri via GET, magari facendo
    Codice PHP:
    [url="ricerca1.php?PRELIMINARE=$preliminare&VERIFICA1=$verifca1& eccetera eccetera eccetera...."][/url
    giusto?????

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Altra piccolissima domandina, se le variabili su cui ordinare sono tante (e sopratutto io ho più tabelle nel database sql, come cambia il seguente pezzo di codice
    Codice PHP:
    $campo $_GET['field'] == "Descrizione" "Descrizione" "Codice_Materiale"
    così è corretto ???
    Codice PHP:
    $campo $_GET['field'] == "requisiti.IMPORTO_GLOBALE" "requisiti.IMPORTO_GLOBALE" "requisiti.IA" "requisiti.IB" :"requisiti.IC" :"requisiti.ID"

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    80
    Un'altro problema.
    Sono riuscito nel mio intento, mi passo le variabili tramite session, e con il codice di TheMastion riesco a ottenere ciò che voglio, c'è solo un problema in pratica cliccando sull'ordinamento mi raddoppia i risultati, in pratica è come se mi facesse due tabelle. Vi posto il codice

    Codice PHP:
    <?php 
    // inizializzo le variabili e prendo i valori dal post
    $prog $_SESSION['prog'];
    $array_unico $_SESSION['unico'];
    $lav $_SESSION['lav'];
    $data $_SESSION['data'];


    //inizializzo le variabili che servono per controllare l'ordinamento

    if (isset($_GET['field']))
    {
        
    $campo $_GET['field'] == "requisiti.IMPORTO_GLOBALE" "requisiti.IMPORTO_GLOBALE":"requisiti.IC";
    }
    else
    {
        
    $campo "requisiti.IC";
    }
    if (isset(
    $_GET['sort']))
    {
        
    $verso $_GET['sort'] == "desc" "DESC" "ASC";
    }
    else
    {
        
    $verso "ASC";





    if (
    $data == '')
     {
    $data "01/01/1900";}
     
    function 
    date_DB($date,$separatore)
      {
      @list(
    $day,$month,$year)=explode($separatore,$date);
      
    $res_arr=array();
      
    $res_arr[]=$year;
      
    $res_arr[]=$month;
      
    $res_arr[]=$day;
      
    $result=implode("-",$res_arr);
      return 
    $result
      };
    // richiamo la funaione date_DB per trasformare la data nel formato corretto
    $mydata=$data;
    $DATA=date_DB($mydata,'/'); /* restituisce 2008/11/24 */




     /* Connessione e selezione del database */
    $connessione mysqli_connect("localhost""root""G91031""database")
    or die(
    "Connessione non riuscita");

    $verso = ($verso == "ASC") ? "desc" "asc";

    /* Preparo la formattazione della tabella e i titoli */
    echo "<table border =\"1\" cellspacing=\"0\" width=\"100%\">
    <TR>
    <TH>NOME</TH>
    <TH><a href='Requisitiord.php?field=requisiti.IMPORTO_GLOBALE&sort=
    {$verso}'>IMPORTO TOTALE</a</TH>
    <TH>IA</TH>
    <TH>IB</TH>
    <TH><a href='Requisitiord.php?field=requisiti.IC&sort=
    {$verso}'>IC</a</TH>
    <TH>ID</TH
    <TH>IE</TH>
    <TH>IF</TH>
    <TH>IG</TH>
    <TH>IIIA</TH>
    <TH>IIIB</TH>
    <TH>IIIC</TH>
    <TH>VIA</TH>
    <TH>VIB</TH>
    <TH>VIII</TH>
    </TR>"
    ;

    // verifico tutte le condizioni sulle fasi progettuali e creo le variabili e gli array per le query 

    // queste sono le variabili finali su cui faccio la query nella tabella lavori e nel campo prestazioni_normativa

    if (isset ($prog))
    {
    if (
    $lav == '0')
    { foreach (
    $prog as $fase)
        {
            
    $query  "SELECT lavori.NOME, requisiti.IMPORTO_GLOBALE, requisiti.IA, requisiti.IB, requisiti.IC, requisiti.ID, requisiti.IE,     requisiti.IF, requisiti.IG,     requisiti.IIIA, requisiti.IIIB, requisiti.IIIC, requisiti.VIA, requisiti.VIB, requisiti.VIII FROM lavori INNER JOIN requisiti ON lavori.ID = requisiti.ID_REQUISITI LEFT JOIN date ON lavori.ID = date.ID_DATE WHERE lavori.PRESTAZIONI_NORMATIVA LIKE '$fase' ORDER BY {$campo} {$verso}";
            
            
    $risultato mysqli_query($connessione,$query) or die("Query fallita");
            while (
    $linea mysqli_fetch_array($risultatoMYSQLI_ASSOC)) 
                {                
                
    // adesso controllo le date lavoro per lavoro che mi viene passato dal ciclo while
                    
    foreach ($array_unico as $array)
                        {
                            
    // controllo che non debba fare solo la sicurezza
                            
    if (isset ($array))
                            { 
                                foreach (
    $array as $faselavoro)
                                    {    
                                        if (isset (
    $faselavoro))
                                            {
                                                
    $nomignolo $linea['NOME'];
                                                
    $fase 'date.FINE_';
                                                
    $fase .= $faselavoro;
                                                
    $dom"SELECT $fase FROM date LEFT JOIN lavori ON date.ID_DATE = lavori.ID WHERE lavori.NOME = '$nomignolo'";
                                                
    $ris mysqli_query($connessione,$dom) or die("Query fallita2");
                                                
    $dataverifica mysqli_fetch_row($ris);
                                                
    // verifico che la data del progetto sia posteriore a quella del bando
                                                
    if ($dataverifica [0] < $DATA)
                                                {                                
                                                    
    $errore '1';
                                                    
    // se la condizione non Ã¨ soddisfatta interrompo il ciclo e passo al successivo gruppo di fasi lavoro
                                                    
    break;
                                                }
                                                else
                                                {                                
                                                    
    $errore '0';
                                                    
    // se la condizione Ã¨ soddisfatta continuo il ciclo
                                                
    }
                                            }
                                    }
                        
                            
    // se invece la condizione Ã¨ soddisfatta mi stampo il risultato e esco dal ciclo perchè almeno una delle richieste è stata soddisfatta
                            
                                
    if ($errore == '0')
                                    {    
                                        
    extract ($linea);
                                        echo  
    "<td>$NOME</td>";
                                        echo  
    "<td>$IMPORTO_GLOBALE</td>";
                                        echo  
    "<td>$IA</td>";
                                        echo  
    "<td>$IB</td>";
                                        echo  
    "<td>$IC</td>";
                                        echo  
    "<td>$ID</td>";
                                        echo  
    "<td>$IE</td>";
                                        echo  
    "<td>$IF</td>";
                                        echo  
    "<td>$IG</td>";
                                        echo  
    "<td>$IIIA</td>";
                                        echo  
    "<td>$IIIB</td>";
                                        echo  
    "<td>$IIIC</td>";
                                        echo  
    "<td>$VIA</td>";
                                        echo  
    "<td>$VIB</td>";
                                        echo  
    "<td>$VIII</td></tr>";
                                        
                                        break;
                                    }
                            }
                        
                        
    // ovviamente se non stampo niente procedo con la ricerca nell'altro gruppo di richieste
                        
    }
                
                } 
        }
    }
    Qualcuno ha dei suggerimenti....

  10. #10
    Bravo!

    Passare alle session era la cosa giusta, visto che devi passare vari dati e che ti tornerà utile poterli leggere da tutte le pagine del sito dove necessario.

    Alcuni appunti:

    Non conviene pubblicare le vere credenziali di accesso a servizi online, meglio eliminarle o sostituirle con asterischi o altro.

    La struttura VAR = CHECK ? RESULT1 : RESULT2 ; richiede esattamente e solo questa sintassi: non si possono aggiungere altri result, come in una vecchia istruzione basic ON CHECK GOTO A,B,C,...N.

    Circa il tuo problema specifico, direi che stai usando troppi cicli annidiati.

    Rivediti la struttura generale del programma...
    Tecnolgie per l'arte.
    Arti per la tecnologia.
    softhare

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.