Visualizzazione dei risultati da 1 a 6 su 6

Discussione: impaginazione

  1. #1

    impaginazione

    Non ho tovato nulla sulla tecnica di impaginazione nel forum, sarei grato se qualcuno mi fornisse informazioni su come impaginare gli elementi di una tabella in PHP.

  2. #2

  3. #3
    Quando si interroga una tabella vengono fuori un certo numero di risultati, che possono essere anche diverse centinaia di righe, per impaginazione intendo visualizzazione di un certo numero di righe alla volta; per esempio se la tabella dopo la ricerca mi fornisce 50 risultati io vorrei visualizzarne 10 alla volta su un totale di 5 pagine. Non so se sono riuscito a farmi comprendere. Grazie

  4. #4
    Qui trovi una lezione della guida che fa al caso

    http://php.html.it/guide/lezione/228...-gli-articoli/

    Oppure ti posto una classe che ho realizzato io, però è ancora in alpha.

    Codice PHP:
    ###################################################################################

    # Classe MakePage



    # Utilizzo:

    # Configurare le proprietà pubbliche all'inizio della classe come da spiegazioni

    #

    # Cereare l'istanza:

    # $paging = new MakePage($_GET['start']);

    # $paging->Result();

    # A questo punto abbiamo istanziato la classe con $_GET['start'] come costruttore.

    # E' fondamentale mantenere questo costruttore in quanto MakePage accorda all'url

    # tramite GET il punto di ingresso della paginazione con la variabile start.

    # In seguito, il metodo Result, restituisce l'identificativo per il database

    # tramite la proprietà res.

    #

    # while ($row = mysql_fetch_array($paging->res))

    #        {

    #            echo $row['titolo'];

    #        }

    #

    # A questo punto abbiamo costruito l'elenco limitato ad un numero definito

    # di record; ora mettiamo i link "pagina precedente" e "pagina successiva".

    # Semplicemente:

    # <td>$paging->previous_link()</td><td>$paging->next_link()</td>

    # Quello che verrà stampato da questi due metodi, dipende dalla configurazione

    # delle proprietà previous_link_string e next_link_string, come spiegato di seguito

    # In opzione possiamo anche aggiungere l'indice delle pagine.

    # Semplicemente:

    # $paging->IndexLinks() da inserire magari tra il previous e il next link.

    ######################################################################################







    /**

     * MakePage

     *

     * @package lib

     * @author Tarchini Maurizio

     * @copyright 2008

     * @access public

     */

     



    class MakePage

    {

        

        
    /**

        * step indica il numero di records per pagina

        * @var int

        */

        
    var $step 5;

        

        
    /**

        * db_name, db_host, db_user, db_password

        * sono i parametri di configurazione per

        * l'accesso al database.

        * @var string 

        */

        

        
    var $db_name "";

        var 
    $db_host "";

        var 
    $db_user "";

        var 
    $db_password "";

        

        
    /**

        * con table si indica la tabella del database nella

        * quale vanno cercati i dati; questo parametro é obbligatorio

        * @var string 

        */

        
    var $table "table";

        

        
    /**

        * In where vanno indicate le clausule della ricerca. Ad esempio

        * $where = "id > 100 AND id < 1000";

        * In questo caso verranno estratti i record con id superiore a 100

        * ed inferiore a 1000. Questa proprietà non é obbligatoria, se non

        * viene utlizzata nessuna clausula, $where = "";

        * @var string

        */

        
    var $where "";

        

        
    /**

        * order fa riferimento alla clausula ORDER BY, va indicato

        * rispetto a cosa il risultato della ricerca deve essere

        * ordinato. Ad esempio: $order = "data". I risultati verranno

        * ordinati per data. Il contenuto di order deve essere un 

        * campo valido della tabella, in caso contrario si

        * produrrà un errore. Order non é obbligatorio, se non

        * viene utilizzato: $order = "";

        * @var string 

        */

        
    var $order "";

        

        
    /**

        * asc_desc è un complemento di order. Inserire ASC se si desiderano

        * i risultati in ordine crescente o DESC se si desiderano i risultati

        * in ordine decrescente. Questa clausula non é obbligatoria ed é inutile

        * se non si utilizza la proprietà order. Se non utilizzata:

        * $asc_desc = "";

        * Se utilizzata accetta solo ASC o DESC, qualunque altro inserimento

        * produrrà un errore.

        * @var string 

        */

        
    var $asc_desc "DESC";

        

        
    /**

        * next_link_string e previous_link_string contengono la stringa che

        * verrà utilizzata come link per spostarsi tra le pagine ad esempio:

        * $next_link_string = "Successive"  oppure ">" oppure se si 

        * desidera inserire un'immagine:

        * $next_link_string = "[img]next.png[/img]";

        * Questi parametri sono obbligatori

        * @var string 

        */

        
    var $next_link_string "Successiva";

        var 
    $previous_link_string "Precedente";

        

        
    /**

        * Se utilizziamo il metodo IndexLinks é buona cosa limitare

        * la lunghezza dell'indice stesso. Infatti, se dovessero 

        * esserci molte pagine, si rischia di avere un'indice enorme

        * che sfora il layout. MakePage cercherà di distribuire

        * equamente l'indice delle pagine prima e dopo la pagina

        * attuale. Ad esempio se max_index=10:

        * Alla prima pagina mostrerà i link delle pagine da 1 a 10,

        * ma se si troverà a pagina 8, mostrerà i link delle pagine

        * da 3 a 13.

        * @var int  

        */

        
    var $max_index 10;

        var 
    $page;

        var 
    $next_link;

        var 
    $previous_link;

        var 
    $conn;

        var 
    $start;

        var 
    $max;

        var 
    $res;

        var 
    $select;

        var 
    $count;

        

        

      
    /**

       * MakePage::MakePage()

       *

       * @param mixed $start

       * Costruttore della classe

       * @return void

       */

            
    function MakePage ($start)

            {

                if (!isset(
    $start) OR $start 0)

                {

                    
    $start 0;

                }

                
    $this->start $start;    

                
    $this->page basename($_SERVER['PHP_SELF']);

            }

            



            function 
    DbConnectAndSelect ()

            {

                
    $this->conn = @mysql_connect($this->db_host,$this->db_user,$this->db_password) or die("Impossibile connettersi a MySql");

                @
    mysql_select_db($this->db_name,$this->conn) or die ("Impossibile selezionare il database $this->db_name");

            }

            



            function 
    DefineQuerys ()

            {

                if (
    $this->where != "")

                {

                    
    $this->where " WHERE " $this->where;

                    

                }

                if (
    $this->order != "")

                {

                    
    $this->order " ORDER BY " $this->order;

                    

                    if (
    $this->asc_desc != "")

                    {

                        
    $this->asc_desc " " $this->asc_desc;

                    }

                    else

                    {

                        
    $this->asc_desc " ";

                    }

                }

                
    $this->select "SELECT * FROM " $this->table $this->where $this->order $this->asc_desc " LIMIT " $this->start "," $this->step;

                

                
    $aa " WHERE rif='general'";

                
    $this->count "SELECT COUNT(*) AS tot FROM " $this->table $this->where;

                

            }

            



            function 
    DefineMax ()

            {

                
    $this->DbConnectAndSelect();

                
    $resM mysql_query($this->count$this->conn);

                
    $row mysql_fetch_array($resM);

                
    $this->max $row['tot'];

                
    mysql_close($this->conn);

            }

            

      
    /**

       * MakePage::Result()

       *

       * @return resource

       */

            
    function Result ()

            {

                
    $this->DbConnectAndSelect();

                
    $this->DefineQuerys();

                
    $this->res mysql_query($this->select$this->conn);    

            }

            

      
    /**

       * MakePage::NextLink()

       *

       * @return string

       */

            
    function NextLink ()

            {

                
    $this->DefineMax();

                if (
    $this->start $this->step $this->max)

                {

                    
    $next $this->start $this->step;

                    echo 
    "<a href=\"$this->page?start=$next\">$this->next_link_string</a>";

                }

            }

            

      
    /**

       * MakePage::PreviousLink()

       *

       * @return string

       */

            
    function PreviousLink ()

            {

                if (
    $this->start 0)

                {

                    
    $back $this->start $this->step;

                    echo 
    "<a href=\"$this->page?start=$back\">$this->previous_link_string</a>";

                }

            }

            

      
    /**

       * MakePage::IndexLinks()

       *

       * @return string

       */

            
    function IndexLinks ()

            {

                
    $this->DefineMax();

                
    $pages intval(($this->max 1) / $this->step) + 1;

                if (
    $pages 1)

                {

                    if (
    $this->start == 0)

                    {

                        
    $now 1;

                    }

                    if (
    $this->start 0)

                    {

                        
    $now = ($this->start $this->step) + 1;

                    }



                
    $si $now - (intval($this->max_index 2));

                
    $ei $now + (intval($this->max_index 2));

                

                if (
    $si <= 0)

                {

                    
    $ei $ei abs($si);

                    
    $si 0;

                        for (
    $i $si$i $pages AND $i $this->max_index $si$i++)

                        { 

                            
    $start_page $i $this->step;

                                

                                if (
    $now == $i 1)

                                    {

                                        
    $n $i 1;

                                        echo 
    $n ";

                                    }

                                    else

                                    {

                                        echo 
    "<a href=$this->page?start=$start_page>" . ($i 1) . "</a> ";

                                    }

                        }

                }

                else

                {

                    if (
    $ei >= $pages)

                    {

                        
    $x $ei $pages;

                        
    $si $si $x;

                        
    $ei $pages;

                            for (
    $i $si$i $pages$i++)

                            { 

                                
    $start_page $i $this->step;

                                

                                    if (
    $now == $i 1)

                                    {

                                        
    $n $i 1;

                                        echo 
    $n ";

                                    }

                                    else

                                    {

                                        echo 
    "<a href=$this->page?start=$start_page>" . ($i 1) . "</a> ";

                                    }

                            }                

                    }

                    else

                    {    

                        for (
    $i $si 1$i <= $ei$i++)

                        { 

                            
    $start_page $i $this->step;

                                if (
    $now == $i 1)

                                {

                                    
    $n $i 1;

                                    echo 
    $n ";

                                }

                                else

                                {

                                    echo 
    " <a href=$this->page?start=$start_page>" . ($i 1) . "</a> ";                            

                                }

                            

                        }

                    }

                }

                



                }

            }

            

            

            



  5. #5
    se ho capito bene quello ceh vuoi fare puoi usare la limit nella query sql

    esempio:

    ammettiamo che hai 50 messaggi e vuoi leggerne i primi 10 nella prima pagina, i secondi 10 nella seconda pagina etc...
    [PHP]
    <?php

    $id = (isset($_GET["idpag"])) ? ((int)$_GET["idpag"]) : 0;
    #qua ci andrebbero le righe di connessione
    $sql = "SELECT * FROM `nometabella` LIMIT $id, 10";
    $ris = mysql_query($sql);
    while($rs = mysql_fetch_array($ris))
    {
    #stampi la tabella come la vuoi fare
    }

    echo "2
    3
    3";

    spiegazione veloce sulla limit "LIMIT daqualerecordcominciare, quantirecordprendere"
    in pratica, in una select prende un numero di record limite partendo dal primo valore, prendendo quanti indicati nel secondo

    spero fosse quello che volevi



    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  6. #6
    ops non avevo visto che avevi gia risposto!
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

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.