Paginazione

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.606
54
48
TN
Ho modificato e usato così tante volte questo script che non ricordo dove ho preso il codice originale
Non me ne voglia l'autore

Ho usato la solita tabella 'listacomuni' per questo esempio

paginazione.php
PHP:
// connessione al db
$conn = mysql_connect('localhost', 'root', '', 'criric');
$db = mysql_select_db('criric', $conn);

// imposto il limite di risultati per pagina
$limite_pag = 20;

// verifico che sia settata la pagina da visualizzare
if (isset($_GET['num_pag'])) {
    $num_pag = $_GET['num_pag'];
} else {
// altrimenti setto la prima pagina
    $num_pag = 1;
}

// imposto il limite minimo da usare nella query
if ($num_pag <= 1) {
    $limite_min = 0;
} else {
    $limite_min = ($num_pag - 1) * $limite_pag;
}

// imposto il limite massimo sul quale finirà la ricerca
$limite_max = $limite_min + $limite_pag;

// interrogo il database per recuperare il numero totale di record
$query = "SELECT * FROM listacomuni";
$res = mysql_query($query, $conn);
$totali = mysql_num_rows($res);

// interrogo il database per recuperare la lista dei record fornendo limite minimo e limite per pagina
$query = "SELECT * FROM listacomuni LIMIT $limite_min,$limite_pag";
$res = mysql_query($query, $conn);

// se il limite massimo supera i record totali lo fermo al numero di record totali
if ($totali <= $limite_max) {
    $limite_max = $totali;
}

// informo sulla ricerca
echo"da ";
echo $limite_min + 1;
echo" a $limite_max risultati su $totali";
echo"<br/><br/>";

// recupero il numero di pagine totali
$pagine = ceil($totali / $limite_pag);

// creo dei pulsanti per andare avanti e indietro nelle pagine
// pulsante indietro
$indietro = $num_pag - 1;
echo " <input ";
if ($num_pag <= 1)
    echo "disabled = 'disabled'";
// da cambiare la destinazione della location
echo "class='min' type='button' onclick='javascript:location.href=\"paginazione.php?pag&num_pag=$indietro\"' value='<'/>&nbsp;";
$avanti = $num_pag + 1;

// select con il numero di pagine
// da cambiare la destinazione della location
echo "<select onchange='javascript:location.href=\"paginazione.php?num_pag=\"+this.value+\"\"'>\n";
for ($i = 1; $i <= $pagine; $i++) {
    echo "<option value='$i' ";
    if ($i == $num_pag)
        echo "selected='selected'";
    echo ">$i</option>\n";
}
echo "</select>";

// pulsante avanti
echo "&nbsp;<input ";
if ($num_pag >= $pagine)
    echo "disabled = 'disabled'";
// da cambiare la destinazione della location
echo "class='min' type='button' onclick='javascript:location.href=\"paginazione.php?num_pag=$avanti\"' value='>'/>";

echo "&nbsp;&nbsp;Totale pagine $pagine";

echo"<br/><br/>";

// stampo i risultati
for ($i = 0; $i < mysql_num_rows($res); $i++) {
    $comune = mysql_result($res, $i, 'comune');
    echo $comune . "<br/>";
}
if(mysql_num_rows($res) == 0) {
    echo "Nessun risultato";
}

è sufficente impostare i propri parametri di connessione e la propria tabella per vederne il risultato

poche righe di codice e risultato più che sufficente
 
Non è stato difficile
ecco qua
PHP:
<?php

// connessione al db
$sql = new mysqli("localhost", "user", "password", "database");

// imposto il limite di risultati per pagina
$limite_pag = 20;

// verifico che sia settata la pagina da visualizzare
if (isset($_GET['num_pag'])) {
    $num_pag = $_GET['num_pag'];
} else {
// altrimenti setto la prima pagina
    $num_pag = 1;
}

// imposto il limite minimo da usare nella query
if ($num_pag <= 1) {
    $limite_min = 0;
} else {
    $limite_min = ($num_pag - 1) * $limite_pag;
}

// imposto il limite massimo sul quale finirà la ricerca
$limite_max = $limite_min + $limite_pag;

// interrogo il database per recuperare il numero totale di record
$query = "SELECT nome FROM comuni";
$res= $sql->query($query);
$totali = $res->num_rows;

// interrogo il database per recuperare la lista dei record fornendo limite minimo e limite per pagina
$query = "SELECT nome FROM comuni LIMIT $limite_min,$limite_pag";
$res = $sql->query($query);

// se il limite massimo supera i record totali lo fermo al numero di record totali
if ($totali <= $limite_max) {
    $limite_max = $totali;
}

// informo sulla ricerca
echo"da ";
echo $limite_min + 1;
echo" a $limite_max risultati su $totali";
echo"<br/><br/>";

// recupero il numero di pagine totali
$pagine = ceil($totali / $limite_pag);

// creo dei pulsanti per andare avanti e indietro nelle pagine
// pulsante indietro
$indietro = $num_pag - 1;
echo " <input ";
if ($num_pag <= 1)
    echo "disabled = 'disabled'";
// da cambiare la destinazione della location
echo "class='min' type='button' onclick='javascript:location.href=\"paginazione.php?pag&num_pag=$indietro\"' value='<'/>&nbsp;";
$avanti = $num_pag + 1;

// select con il numero di pagine
// da cambiare la destinazione della location
echo "<select onchange='javascript:location.href=\"paginazione.php?num_pag=\"+this.value+\"\"'>\n";
for ($i = 1; $i <= $pagine; $i++) {
    echo "<option value='$i' ";
    if ($i == $num_pag)
        echo "selected='selected'";
    echo ">$i</option>\n";
}
echo "</select>";

// pulsante avanti
echo "&nbsp;<input ";
if ($num_pag >= $pagine)
    echo "disabled = 'disabled'";
// da cambiare la destinazione della location
echo "class='min' type='button' onclick='javascript:location.href=\"paginazione.php?num_pag=$avanti\"' value='>'/>";

echo "&nbsp;&nbsp;Totale pagine $pagine";

echo"<br/><br/>";

// stampo i risultati
while ($row = $res->fetch_array(MYSQLI_ASSOC)) {
    echo $row['nome'] . "<br/>";
}
if ($res->num_rows == 0) {
    echo "Nessun risultato";
}
?>
non l'ho testato con la tabella che hai indicato ma dovrebbe funzonare
 

Discussioni simili