Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Paginazione

  1. #1

    Paginazione

    Sono riuscito a fare questo script con qualche modifica,ma c'è un piccolo problema:
    Codice PHP:
    <?
    //inclusione della classe
    include('classe_paginazione.php');

    //record da mostrare in ogni pagina
    $x_pag 25;

    //recupero il numero di pagina corrente utilizzando una querystring
    $pag $_GET['pag'];

    //se $pag non è valorizzato gli assegno valore 1
    if (!$pag$pag 1

    //connessione al database
    include('../connect.php');

    //la classe per l'impaginazione
    $p = new Paging;

    //conto i record nel database
    $query_count mysql_query("SELECT * FROM GIOC_giovani") or die (mysql_error());
    $count mysql_num_rows($query_count) or die (mysql_error());

    //trovo il numero delle pagine che dovrà essere contato
    $pagine $p->contaPagine($count$x_pag);

    //contiamo le righe presenti nella tabella
    $all_rows mysql_num_rows(mysql_query("SELECT id FROM GIOC_giovani"));

    //definisco il numero totale di pagine
    $all_pages ceil($all_rows $x_pag);

    //calcolo da quale record iniziare
    $first = ($pag 1) * $x_pag;

    //recupero i record per la pagina corrente
    $rs mysql_query("SELECT * FROM GIOC_giovani LIMIT $first$x_pag");
    $nr mysql_num_rows($rs);
    if (
    $nr != 0){
      for(
    $x 0$x $nr$x++){
        
    $row mysql_fetch_assoc($rs);
        echo 
    "<table>";
        echo 
    "<td>" $row['nome'] . "</td>";
        echo 
    "<td>" $row['cognome'] . "</td>";
        echo 
    "<td>" $row['ruolo'] . "</td>";
        echo 
    "</table>";
      }
    }else{
      echo 
    "Nessun record trovato!";
    }

    //mostriamo le pagine
    $lista $p->listaPagine($_GET['p'], $pagine);
    echo 
    $lista "
    "
    ;

    //mostriamo il navigatore Precedente/Successiva
    $navigatore $p->precedenteSuccessiva($_GET['p'], $pagine);
    echo 
    $navigatore;

    //chiudo la connessione
    mysql_close($conn);
    ?>
    I primi 25 record sono estratti in modo corretto,però se cambio pagina i record non cambiano...sapete dirmi dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    I dati che fornisci sono insufficienti per una risposta. Occorre almeno vedere la classe paging. Oppure inizia a visualizzare con quelche echo i vari valori fondamentali che sospetti non stiano funzionando e fai un po' di troubleshooting in autonomia.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    classe_paginazione.php
    Codice PHP:
    <?
    //definisco una costante per la pagina corrente
    define("SELF"$_SERVER['PHP_SELF']);

    //definisco la classe
    class Paging
    {
    //definisco la pagina di partenza
    function paginaIniziale($max_row) {
    if ((!isset(
    $_GET['p'])) || ($_GET['p'] == "1"))
    {
    $parti_da 0;
    $_GET['p'] = 1;
    }else{
    $parti_da = ($_GET['p']-1) * $max_row;
    }
    return 
    $parti_da;
    }

    //conto le pagine e stabiliasco quanti records devono essere impaginati 
    function contaPagine($conta$max_row)
    {
    $pgg = (($conta $max_row) == 0) ? $conta $max_row floor($conta $max_row) + 1;
    return 
    $pgg;
    }

    //vedo l'elenco delle pagine
    function listaPagine($p_corrente$pgg)
    {
        
    $listapgg "";
        if ((
    $p_corrente != 1) && ($p_corrente))
        {
          
    $listapgg .= " <a href=\"".SELF."?p=1\">Prima pag.</a> ";
        }
        if ((
    $p_corrente-1) > 0)
        {
          
    $listapgg .= "<a href=\"".SELF."?p=".($p_corrente-1)."\"><</a> ";
        }
        for (
    $i=1$i<=$pgg$i++)
        {
        if (
    $i == $p_corrente)
        {
        
    $listapgg .= "[b]".$i."[/b]";
        }else{
        
    $listapgg .= "<a href=\"".SELF."?p=".$i."\">".$i."</a>";
        }
        
    $listapgg .= " ";
        }
        if ((
    $p_corrente+1) <= $pgg)
        {
          
    $listapgg .= "<a href=\"".SELF."?p=".($p_corrente+1)."\">></a> ";
        }
        if ((
    $p_corrente != $pgg) && ($pgg != 0))
        {
          
    $listapgg .= "<a href=\"".SELF."?p=".$pgg."\">Ultima pag.</a> ";
        }
        
    $listapgg .= "</td>\n";
        return 
    $listapgg;
      }

      
    // permettiamo la navigazione per pagine precedenti e successive
      
    function precedenteSuccessiva($p_corrente$pgg)
      {
        
    $impaginazione "";
        if ((
    $p_corrente-1) <= 0)
        {
          
    $impaginazione .= "Precedente";
        }else{
          
    $impaginazione .= "<a href=\"".SELF."?p=".($p_corrente-1)."\">Pag. precedente</a>";
        }
        
    $impaginazione .= " | ";
        if ((
    $p_corrente+1) > $pgg)
        {
          
    $impaginazione .= "Prossima";
        }else{
          
    $impaginazione .= "<a href=\"".SELF."?p=".($p_corrente+1)."\">Prossima pag.</a>";
        }
        return 
    $impaginazione;
      }
    }
    ?>

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Ti ho scritto un codice di esempio completo e funzionante, così riesci ad orientarti meglio.
    Tieni presente che
    • il nome del db è "new_schema"
    • il nome della tabella è "tabella"
    • La tabella ha due campi di nome: "id, campo"
    • Devi riadeguare il codice per la mysql_connect



    Codice PHP:
    <?php

    //LA CLASSE PER IL PAGING
    class Paging {
        private 
    $totPag//Totale Pagine nella tabella
        
    private $pagCorr//Pagina corrente
        
    private $totRighe//Totale righe nella tabella
        
    private $righePerPagina//Numero di righe per pagina da ottenere

        //Facilita l'accesso all'array dell'intervallo
        
    const kIntervalloInizio='inizio';
        const 
    kIntervalloLunghezza='lunghezza';

        
    // Il costruttore chiede quale sia la pagina corrente, il totale delle
        // righe in tabella e quante righe per pagina interessano
        
    public function __construct($pagCorr,$totRighe,$righePerPagina) {
            
    $this->pagCorr=$pagCorr;
            
    $this->totRighe=$totRighe;
            
    $this->righePerPagina=$righePerPagina;
            
    $this->totPag=$this->contaPagine($totRighe$righePerPagina);
        }

        
    // Consente di modificare la pagina corrente con un'altra dopo
        // l'esecuzione del construct
        
    public function vaiAPagina($pagina){
            if(
    $pagina==self::kUltimaPagina)
                
    $this->pagCorr=$this->totPag;
            elseif(
    is_numeric($pagina) and $pagina>and $pagina<$this->totPag
                
    $this->pagCorr=$pagina;    
            else
                
    $this->pagCorr=1;
        }

        
    //Indica in quante pagine viene divisa la tabella
        
    public function contaPagine($totRighe$righePerPagina) {
            return 
    ceil($totRighe $righePerPagina);
        }

        
    //Restituisce un array indicante la posizione del primo record e quante
        //righe occorre scorrere
        
    public function dammiIntervallo() {
            return array(
                
    self::kIntervalloInizio => ($this->pagCorr-1) * $this->righePerPagina,
                
    self::kIntervalloLunghezza => $this->righePerPagina
            
    );
        }

        
    //Ritorna il numero per la prossima pagina
        
    public function prossimaPagina(){
            if(
    $this->totPag==0)
                    return 
    1;
            return (
    $this->pagCorr>=$this->totPag)?$this->totPag:$this->pagCorr+1;
        }

        
    //Ritorna il numero per la pagina precedente
        
    public function precedentePagina(){
            return (
    $this->pagCorr<=1)?1:$this->pagCorr-1;
        }

    }

    //PREPARA L'OGGETTO PAGING E LO RITORNA
    function CostruisciOggettoPaging($sql) {  
        if (!isset(
    $_GET['p']))
            
    $pagCorr 1;
        else
            
    $pagCorr=$_GET['p'];
        
    $res mysql_query($sql) or die('Err3');
        
    $totRighe mysql_num_rows($res);
        
    mysql_free_result($res);    
        
    $righePerPagina 3;
        return new 
    Paging($pagCorr$totRighe$righePerPagina);
    }

    //REALIZZA LA TABELLA E LA RITORNA SOTTO FORMA DI STRINGA
    function CostruisciTabella($p,$sql) {
        
    $inter=$p->dammiIntervallo();
        
    $res mysql_query("$sql limit {$inter[Paging::kIntervalloInizio]},{$inter[Paging::kIntervalloLunghezza]}") or die('Err4');
        
    ob_start();
        
    //Definizione della tabella
        
    echo <<<END
    <table border="1" cellpadding="10px">
        <caption>Cattura record dal 
    {$inter[Paging::kIntervalloInizio]} avanzando di {$inter[Paging::kIntervalloLunghezza]}</caption>
        <tr>
            <th>ID</th>
            <th>Campo</th>
        </tr>
    END;
        while (
    $row mysql_fetch_assoc($res)) {
            echo <<<END
        <tr>
            <td>
    {$row['id']}</td>
            <td>
    {$row['campo']}</td>
        </tr>
    END;
        }
        
    //Link di navigazione
        
    echo <<<END
        <th colspan="2">
            [url="
    {$_SERVER['PHP_SELF']}?p={$p->precedentePagina()}"]Indietro[/url] |
            [url="
    {$_SERVER['PHP_SELF']}?p={$p->prossimaPagina()}"]Avanti[/url]
        </th>
    </table>
    END;
         
    mysql_free_result($res);
         return 
    ob_get_clean();
    }

    // CORPO PRINCIPALE DELLO SCRIPT
    $conn=mysql_connect("localhost""user""password") or die('Err1');
    mysql_select_db('new_schema',$conn) or die('Err2');

    //Query magari da arricchire con una bella clausola where
    $sql="select * from tabella";

    $p CostruisciOggettoPaging($sql);
    $tabella_dati CostruisciTabella($p,$sql);

    mysql_close($conn);

    //SEGUE LA VISUALIZZAZIONE DEI DATI IN PAGINA HTML
    ?>
    <html>
        <head>
            <title>Esempio paginazione</title>
        </head>
        <body>
            <?php echo $tabella_dati;?>
        </body>
    </html>
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Per mostrarti che funziona l'ho pubblicato

    Esempio

    Alla pagina c'è anche il link per accedere al sorgente
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  6. #6
    Grazie infinite!!!Sei stato impeccabile!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.