Salve utenti del forum.
Ho ricevuto di recente un paio di mail nella quali mi si chiedeva gentilmente di inserire un esempio completo riguardante la paginazione dei dati in PHP, visto che gli esempi fatti in un post collegato, non erano abbastanza chiari.
Questo è il link al post originale :
http://www.manuali.it/forum/viewtopic.php?t=19351&highlight=paginazione
Facendo riferimento al post di cui sopra, prenderemo il caso in cui vogliamo utilizzare la paginazione tramite la funzione :
pagination_3 , che comunque inserisco subito sotto.
NOTA: è stata apportata una modifica: i parametri formali della funzione pagination_3 , sono 3
1. $total_pages;
2. $page;
3.$webpage;
Quest'ultima, precendentemente veniva creata come variabile glogale e può andar bene nel caso in cui le impostazioni di REGISTER_GLOBALS del php.ini siano settati su ON.
Con questa modifica, $webpage è una variabile formale della funzione e quindi locale al metodo.
Procediamo.
CODICE funzione pagination_3 che utilizzeremo:
Codice:
/*copiami da qui*/
<?php
function pagination_3($total_pages,$page,$webpage){ //imposto la mia $webpage come parametro formale
$pagination = "";
if($total_pages!=1){
if($page>'1')
{
$pagination.="<a href=".$webpage."?page=1><small>prima</small></a>
<a href=".$webpage."?page=".($page-1).">Prev</a>";
}
//Impostiamo il massimo numero di links di partenza da visualizzare nella pagina.
$maximum_links = 10;
//Se sono necessarie meno pagine rispetto al numero massimo
if($total_pages<=$maximum_links)
{
//Il numero massimo di links che occorreranno saranno pari al numero totale di pagine + 1
$maximum_links = $total_pages+1;
}
//Se ne sono necessarie di piu, allora:
else{
//$maximum_links +1
$maximum_links=$maximum_links+1;
if($page>=$maximum_links){
$maximum_links=$page+1;
}
}
for ($i=1;$i<$maximum_links;$i++)
{
if($i==$page){
$pagination.="<a>".$i."</a>";
}
else{
$pagination.= "<a href=".$webpage."?page=".$i.">".$i."</a>";
}
}
//next e ultima pagina;
if(($page >="1")&&($page!=$total_pages)){
$pagination.= "<a href=".$webpage."?page=".($page+1).">Next</a>
<a href=".$webpage."?page=".$total_pages."><small>ultima</small></a>";
}
}
else{
$pagination.="";
}
return($pagination);
}
//il risultato di questa paginazione è il seguente :
//prima PREV 1 2 3 4 5 6 7 8 9 10 Next ultima
?>
//copiami fino a qui;
Apriamo il nostro server locale o se avete un vostro domino, la vostra root path :
http://localhost/paginazione/.....
1.Creiamo una cartella e chiamiamola "include". Al suo interno creiamo un file : paginazione.inc.php e ci incolliamo il codice che ho messo sopra.
Adesso procediamo al passo 2.
nella vostra path principale del sito , creiamo un file che chiameremo paginazione.php, cosi avremo :
http://localhost/paginazione/paginazione.php ;
CODICE paginazione.php :
Codice:
<?php
require "include/config.inc.php";
require "include/dbms.inc.php";
require "include/paginazione.inc.php";
$webpage = basename($_SERVER['PHP_SELF']);
$page = (!isset($_GET['page']))? 1 : $_GET['page'];
$result = mysql_query("select * FROM dati ORDER BY id ASC");
$max_results = 5;//numero di elementi da visualizzare per pagina.
$total_results = mysql_num_rows($result);
$total_pages = ceil($total_results / $max_results);
$from = (($page * $max_results) - $max_results);
$result=mysql_query("select * FROM dati ORDER BY id ASC LIMIT $from, $max_results ");
while ($i = mysql_fetch_array($result))
{
echo"".$i['id']."-".$i['nome']."<br />";
}
echo pagination_3($total_pages, $page, $webpage);
?>
Adesso, ritorniamo nella nostra cartella include e creiamo 2 nvuovi files, rispettivamente
config.inc.php e
dbms.inc.php;
config.inc.php serve per configurare la nostra password , l'utente che puo utilizzare il database e il nome del nostro database.
Dbms.inc.php contiene le funzioni per la connessione al database, la gestione dei record , la chiusura del db.
CODICE "config.inc.php" :
Codice:
<?php
define ("BASE_URL", "http://localhost/paginazione/");
define ("DB_HOST", "localhost");
define ("DB_USER", "root");
define ("DB_PASSWORD", "tuapassword");
define ("DB_TABLE", "paginazione");
?>
CODICE "dbms.inc.php" :
Codice:
<?php
//FILE ::: DBMS.INC.PHP
$DBhost = DB_HOST;
$DBname = DB_TABLE;
$DBuser = DB_USER;
$DBpass = DB_PASSWORD;
$dbms_database_open = false;
function openDB() {
global $database,
$dbms_database_open,
$DBhost,
$DBname,
$DBuser,
$DBpass;
$conn = mysql_Connect($DBhost,$DBuser,$DBpass);
if ($conn!=false) {
$database=$conn;
mysql_select_db($DBname);
$dbms_database_open = true;
}
}
function closeDB() {
global $database,
$dbms_database_open;
mysql_Close($database);
$dbms_database_open = false;
}
function execute_query($query)
{
$result = mysql_query($query);
if (!$result)
{
echo "EXECUTE QUERY HA DATO ERRORE!!!<br>".mysql_error();
echo"query:: ".$query;
exit;
}
return $result;
}
function db_fetch_array($result)
{
return mysql_fetch_array($result);
}
function is_empty($result)
{
return mysql_num_rows($result) == 0;
}
openDB();
?>
Ci siamo quasi.
Adesso per rendere completo l'esempio, dobbiamo crearci il nostro bel database semplice semplice.
Vi inserisco il dump del database che ho creato per fare l'esempio :
Codice:
-- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generato il: 14 Set, 2007 at 02:05 PM
-- Versione MySQL: 5.0.41
-- Versione PHP: 4.4.7
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `paginazione`
--
-- --------------------------------------------------------
--
-- Struttura della tabella `dati`
--
DROP TABLE IF EXISTS `dati`;
CREATE TABLE IF NOT EXISTS `dati` (
`id` int(11) unsigned NOT NULL auto_increment,
`nome` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
--
-- Dump dei dati per la tabella `dati`
--
INSERT INTO `dati` (`id`, `nome`) VALUES (1, 'emiliano');
INSERT INTO `dati` (`id`, `nome`) VALUES (2, 'davide');
INSERT INTO `dati` (`id`, `nome`) VALUES (3, 'francesco');
INSERT INTO `dati` (`id`, `nome`) VALUES (4, 'annalisa');
INSERT INTO `dati` (`id`, `nome`) VALUES (5, 'martina');
INSERT INTO `dati` (`id`, `nome`) VALUES (6, 'gigi');
INSERT INTO `dati` (`id`, `nome`) VALUES (7, 'matteo');
INSERT INTO `dati` (`id`, `nome`) VALUES (8, 'genoveffa');
INSERT INTO `dati` (`id`, `nome`) VALUES (9, 'adriano');
INSERT INTO `dati` (`id`, `nome`) VALUES (10, 'mose');
INSERT INTO `dati` (`id`, `nome`) VALUES (11, 'valerio');
INSERT INTO `dati` (`id`, `nome`) VALUES (12, 'emilio');
INSERT INTO `dati` (`id`, `nome`) VALUES (13, 'andrea');
INSERT INTO `dati` (`id`, `nome`) VALUES (14, 'elisa');
INSERT INTO `dati` (`id`, `nome`) VALUES (15, 'vittoria');
Io sto usanto WAMP server, in locale, quindi vado nel mio bel phpmyadmin
http://localhost/phpmyadmin/ e :
1: creo il mio database :"paginazione";
2: Lo seleziono e poi sulla linguetta "QUERY", inserisco il codice relativo al dump del database.
Se volete, potete crearvi direttamente la tabella , senza inserire i dati e farlo voi stessi in un seocndo momento, facendo chiaramente attenzione al fatto che se modificate i nomi dei campi della tabella, li dovrete modificare nella query per l'estrazione dei dati.
Ora che abbiamo creato il nostro bel database, andiamo su:
http://localhost/paginazione/paginazione.php e vedrete il risultato.
Credo sia tutto.
A presto E.