In un portale leggermente più complesso dai soliti siti-vetrina (in cui esistono solo pagine di presentazione), è probabile che vi troverete a creare una pagina di elenco prodotti, oppure una pagina dove sono stilate le news inserite di volta in volta.
In questa situazione avrete la necessità di suddividere i prodotti (o le news) in più pagine. Provate, infatti, a immaginare cosa accadrebbe se il sito in questione dovesse mostrare non 10 o 20 prodotti, ma 100 o addirittura qualche migliaio (negli e-commerce è cosa frequente). Oltre a rallentare la pagina nel caricamento, l’utente sarebbe costretto a scorrere il browser in su e in giù, con il risultato che prima o poi si stancherebbe o di perdere qualche elemento fondamentale.
Il classico spazio in alto e in fondo pagina, adibito ai numerini con freccia avanti e indietro per scorrere, ci diventa essenziale.
In questo articolo vedremo uno script di esempio su come creare una paginazione in php.
Nell’esempio si presume che in un database siano salvati alcuni utenti (ma potrebbero essere, come detto, prodotti o news): noi dovremmo estrarli e mostrarne solo una decina per pagina.
L’esempio è minimale e formattato senza badare troppo alla grafica (starà a voi adattarla), ma serve a chiarire il concetto per poter poi applicare le modifiche personalizzate. Ogni parte è dovutamente commentata.
Download script
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
<?php //la query è necessaria per trovare il numero totale di utenti da estrarre $query_utente_iniziale="SELECT * FROM utenti"; $result_iniziale=mysql_query($query_utente_iniziale, $db); $num=mysql_num_rows($result_iniziale); $per_pagina=10; $tot_pagine=ceil($num/$per_pagina); if($num>0){ //pagina corrente if(isset($_GET["idpag"])){ $idpag=$_GET["idpag"]; }else $idpag='1'; //Calcolo i numeri iniziale e finale che andranno a limitare la query if($idpag==1) $inizio=0; else $inizio=($idpag*$per_pagina)-$per_pagina; //Query della pagina: la ripeto limitando ai record che devono essere mostrati //nella pagina $query_utente="SELECT * FROM utenti limit $inizio, $per_pagina"; $result=mysql_query($query_utente, $db); /******** Stampo i risultati o faccio operazioni varie *********/ //Link per scorrere le pagine: la pagina corrente ha un aspetto diverso ?> <div style="float: right;"> <?php if($idpag>1){?> <span style="text-decoration: underline; margin-right: 10px"><a href="?pag=<?php echo ($pag-1);?>"><</a></span> <?php }else{?> <span><</span> <?php } $i=1; do{ //Link per scorrere le pagine: la pagina corrente ha un aspetto diverso if($i==$idpag){?> <span style="text-decoration: none; font-weight: bold; margin-right: 10px"><a href="?idpag=<?php echo $i;?>"><?php echo $i;?></a></span> <?php }else{?> <span style="text-decoration: underline; margin-right: 10px"><a href="?idpag=<?php echo $i;?>"><?php echo $i;?></a></span> <?php } $i++; }while($i<=$tot_pagine); if($pag<$tot_pagine){?> <span style="text-decoration: underline; margin-right: 10px"><a href="?pag=<?php echo ($pag+1);?>">></a></span> <?php }else{?> <span>></span> <?php }?> </div> <?php } //if($num>0) ?> |
Salve, avrei bisogno di inserire una semplice pagina che dal form (come questo) inserisce il commento e lo pubblica subito. Ho problemi con il codice e vorrei che mi spedissi la pagina del server relativa (questa) ai commenti. Quella su cui sto scrivendo. Ciao
Ciao Marco,
il form del commento è in una funzione implementata direttamente in WordPress, ma comunque non fa niente di particolare: semplicemente invia il contenuto della textarea come post, lo salva nel database (insieme al nome utente) e poi ricarica la pagina. Quando ricarica la pagina, il commento viene preso insieme agli eventuali commenti precedenti e stampato in cima.
Di preciso che problemi hai con il codice?
Non conosco il tuo livello di conoscenza nei linguaggi php e mysql: se sei alle prime armi, prova a dare un’occhiata a questo articolo e vedi se ne esci: http://www.manuelmarangoni.it/sir-bit/874/tutorial-php-e-mysql-connessione-e-gestione-di-un-database-select-insert-update-delete-parte-01/
a me il limite delle pagine non funziona, l’ho settato a 7 ma ne escono 15
Ciao Angelo,
ho appena fatto una prova e a me funziona perfettamente. Prova a stampare a video le query e vedi se noti qualcosa di strano nel limit