Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    45

    Paginazione dati con ordinazione

    Buongiorno,

    avrei bisogno di implementare la paginazione dei dati con l'ordinazione dei risultati.
    Ho utilizzato questa classe php http://www.phpkode.com/scripts/item/css-pagination/ che viene richiamata nella pagina html nella quale passerà la query, i risultati per pagina e la pagina. Il tutto funziona e divide i risultati della query in tot pagine.

    Ora vorrei integrare l'ordinazione dei dati tramite una select in un form. Ho provato inserendo un ORDER BY nella query passandole la variabile ottenuta tramite la selezione: ORDER BY $variabile_select.

    Il tutto funziona solo nella prima pagina, nelle pagine successive l'ordinazione si perde. Come posso fare per far funzionare un'ordinazione di dati paginati? Io volevo ordinare i risultati es per prezzo per data ecc..

    Se potete consigliarmi come fare in base alla classe del link ve ne sarei grato.
    Grazie per le risposte

  2. #2
    Utente di HTML.it L'avatar di kakashi
    Registrato dal
    Feb 2005
    Messaggi
    357
    Facendo riferimento alle variabili dello script citato (e non il tuo) e tenendo conto di ciò che scrivi devi fare questo

    Codice PHP:
    $website $_SERVER['PHP_SELF']."?id=1&campoFORMordine=".$variabile_select

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    45
    ho provato a fare in questo modo ma non funziona:

    Codice PHP:

            
    ...
        
            
    $scelta $_POST['scelta'];
                    
        include(
    "config.php");
        require_once(
    "CSSPagination.php");
            
            
            if(
    $scelta == "data" || $scelta == ""){
           
               
    $ordina "libro.data DESC,libro.prezzo ASC";   
           
            }
       
           if(
    $scelta == "prezzo"){
           
          
    $ordina "libro.prezzo ASC,libro.data DESC";   
           
            }
           
         
    // connessione db

    $sql1 "SELECT ... WHERE libro.titolo LIKE '%".$titolo."%'";
    $rowsperpage 5// 5 records per page. You can change it.
    $website $_SERVER['PHP_SELF']."?id=1&ordine=".$scelta// other arguments if need it.
    $pagination = new CSSPagination($sql1$rowsperpage$website); // create instance object
    $pagination->setPage($_GET[page]); // dont change it

    echo $pagination->showPage();

    echo 
    "<form method='post' action=''>";
    echo    
    "<select class='noFocus' name='scelta'>";
    echo    
    "    <option value='data' selected='selected'>data</option>";
    echo    
    "        <option value='prezzo'>prezzo</option>";
    echo    
    "  </select>";
    echo  
    "<input class='button' type='submit' value='ORDINA'/>";
    echo 
    "</form>";

    // Second select is similar at the top one, but it follows by limitation.

    $sql2 "SELECT ... WHERE libro.titolo LIKE '%".$titolo."%' ORDER BY $ordina LIMIT " $pagination->getLimit() . ", " $rowsperpage;

    $result mysql_query($sql2$link) or die("failed");

    while (
    $r mysql_fetch_array($result)){
         
    //risultati 
    Così funziona come prima nella prima pagina funziona e le altre no.
    devo modificare anche i link della paginazione della classe?
    Grazie per la risposta e per l'aiuto

  4. #4
    Utente di HTML.it L'avatar di kakashi
    Registrato dal
    Feb 2005
    Messaggi
    357
    $scelta lo devi far diventare un valore $_GET altrimenti non ti puoi portare il dato dietro cosi come anche il titolo.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    45
    scusa ma non riesco a capire proprio il funzionamento...
    non riesco sempre a far passare i valori nella paginazione
    Non è che devo modificare anche la classe per far passare i valori?

    Adesso sembra che ordini per prezzo la prima pagina come nella seconda pagina ci fosse la continuazione dei risultati ma quando vado alla seconda pagina è la continuazione dei risultati ordinati per data...

    Grazie per la mano che mi stai dando è l'ultima cosa di un sito che non risco a sistemare e poi il resto è fatto...ma mi sta facendo impazzire!!

    il codice modificato:

    Codice PHP:

    if(isset($_GET['titolo']) && !empty($_GET['titolo'])){
            
            
    $titolo $_GET['titolo'];
          
        }
        
        
    //toglie lo spazio davanti all'immissione titolo
        
    $titolo ltrim($titolo);
        
    $username=$_SESSION['username'];
        
        
        if(isset(
    $_GET['scelta']) && !empty($_GET['scelta'])){
            
            
    $scelta $_GET['scelta'];
          
        }
        if(
    $scelta == ""){
            
        
    $scelta "data";    
            
        }
                    
                include(
    "config.php");
            require_once(
    "CSSPagination.php");
            
            
       if(
    $scelta == "data"){
           
        
    $ordina "libro.data DESC,libro.prezzo ASC";   
           
       }
       
       if(
    $scelta == "prezzo"){
           
        
    $ordina "libro.prezzo ASC,libro.data DESC";   
           
       }
           
       
    //connessione db

    $sql1 "SELECT ... WHERE libro.titolo LIKE '%".$titolo."%'";
    $rowsperpage 5// 5 records per page. You can change it.
    $website $_SERVER['PHP_SELF']."?id=1&titolo=$titolo&ordine=".$scelta// other arguments if need it.
    $pagination = new CSSPagination($sql1$rowsperpage$website); // create instance object
    $pagination->setPage($_GET[page]); // dont change it

    echo $pagination->showPage();

    echo 
    "<form method='get' action=''>";
    echo    
    "<select class='noFocus' name='scelta'>";
    echo    
    "    <option value='data' selected='selected'>data</option>";
    echo    
    "        <option value='prezzo'>prezzo</option>";
    echo    
    "  </select>";
    echo  
    "<input class='button' type='submit' value='ORDINA'/>";
    echo 
    "</form>";

    // Second select is similar at the top one, but it follows by limitation.

    $sql2 "SELECT ... WHERE libro.titolo LIKE '%".$titolo."%' ORDER BY $ordina LIMIT " $pagination->getLimit() . ", " $rowsperpage;

    $result mysql_query($sql2$link) or die("failed");

    while (
    $r mysql_fetch_array($result)){

    //risultati

    ... 

  6. #6
    Utente di HTML.it L'avatar di kakashi
    Registrato dal
    Feb 2005
    Messaggi
    357
    Modifica anche questo
    Codice PHP:
    $sql1 "SELECT ... WHERE libro.titolo LIKE '%".$titolo."%' ORDER BY $ordina"

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    45
    Non cambia niente purtroppo...

    questi sono gli header:

    risualtati dopo scritta "a" su form ricerca:

    Pagina 1 ordinata per data:
    codice:
    .../sito/ricerca_titolo.php?titolo=a
    Pagina 2 ordinata per data:
    codice:
    .../sito/ricerca_titolo.php?id=1&titolo=a&ordine=data&page=2
    e funziona

    Se clicco da pagina 2 sulla select per ordinare per prezzo:
    codice:
    .../sito/ricerca_titolo.php?scelta=prezzo
    e l'ordinamento è giusto

    Se clicco ora per andare alla pagina due dell'ordinamento per prezzo:
    codice:
    .../sito/ricerca_titolo.php?id=1&titolo=&ordine=prezzo&page=2
    ma me lo ordina come se la prima pag fosse per data e se da qui clicco sul link per andare alla prima pagina
    codice:
    .../sito/ricerca_titolo.php?id=1&titolo=&ordine=data&page=1
    mi ritorna alla prima pagina ordinata per data...

  8. #8
    Utente di HTML.it L'avatar di kakashi
    Registrato dal
    Feb 2005
    Messaggi
    357
    fai un echo di $website. e cambia spesso pagina e vedi il risultato

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    45
    intanto ti ringrazio molto per il tuo aiuto.

    ho fatto l'echo di website

    il problema è che non passa il valore dell'ordinazione con la paginazione del prezzo.

    i risultati sono questi:

    con la ricerca di a come prima...

    pagina 1 con ordinamento data:

    /sito/ricerca_titolo.php?id=1&titolo=a&ordine=data

    pagina 2 con ordinamento data

    /sito/ricerca_titolo.php?id=1&titolo=a&ordine=data

    se premo per prezzo da pagina 2

    /sito/ricerca_titolo.php?id=1&titolo=&ordine=prezzo

    e mi porta a pagina 1 con ordine prezzo

    cliccando sul link di pagina 2

    /sito/ricerca_titolo.php?id=1&titolo=&ordine=data

    perde il valore dell'ordine...

  10. #10
    Utente di HTML.it L'avatar di kakashi
    Registrato dal
    Feb 2005
    Messaggi
    357
    Aaaaa ok. Se da pagina 2 cambi ordine (quindi penso che ripremi il tasto del form), devi far in modo che ci sia un campo titolo sempre presente, perchè si resetta il campo.

    Codice PHP:
    echo "<form method='get' action=''>"
    echo    
    "<input type='hidden' name='titolo' value='".$_GET["titolo"]."'/>"
    echo    
    "<select class='noFocus' name='scelta'>"
    echo    
    "    <option value='data' selected='selected'>data</option>"
    echo    
    "        <option value='prezzo'>prezzo</option>"
    echo    
    "  </select>"
    echo  
    "<input class='button' type='submit' value='ORDINA'/>"
    echo 
    "</form>"

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.