Problema su numerazione paginazione php

migo80

Utente Attivo
25 Apr 2013
243
3
18
Ciao richiedo un vostro aiuto riguardo ad uno script di paginazione preso da qui :

https://www.mrw.it/php/paginazione-dati-mysql_6871.html

l'ho riadattato alle mie esigenze il tutto funziona l'unica cosa a non andare è che scorrendo le varie pagine i numeri precedenti non scompaiono ad esempio 1: << < 1...12 13 14 15 > >>
invece a video ottengo questo risultato esempio 2 :
<< < 1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 > >> e così via .

Questo sotto inserito è quello che sto usando io, è possibile modificarlo per ottenere il risultato dell'esempio 1?

PHP:
<?php
$x_pag = 10;

$pag = isset($_GET['pag']) ? $_GET['pag'] : 1;
if (!$pag || !is_numeric($pag)) $pag = 1; 

			$mysqli = new mysqli($this->host, $this->user, $this->pass, $this->db);
			$results = $mysqli->query("SELECT * FROM ".$this->table." ORDER BY id DESC");
			$all_rows = $results->num_rows;

$all_pages = ceil($all_rows / $x_pag);

$first = (($pag  * $x_pag)-$x_pag) ;
			
 			$result = $mysqli->query("SELECT * FROM ".$this->table." ORDER BY id DESC LIMIT $first, $x_pag");
$nr = $result->num_rows;
if ($nr != 0){
 for($x = 0; $x < $nr; $x++){
		$row = $result->fetch_assoc(); 
			$id = $row['id'];
			$titolo = $row['titolo'];
			$prezzo = $row['prezzo'];
			$annuncio = $row['annuncio'];
			$data = date ("d/m/Y",$row['data']);
			$country = $row['regione'];
			$provincia = 'enevnto';
			$citta = $row['citta'];	?>
            
 	<div class="row-fluid">
        
    	<div class="span3 text-center">
            <img class="dimensione img-polaroid" src="engine/link1.php?id=<?php echo $id; ?>" alt="<?php echo $titolo; ?>"/> 
            <a href="contatta-inserzionista.php?pag=<?php echo $id; ?>"> <p class=" btn btn-danger">vedi Annuncio <b>></b></p></a> 
        </div>
        <div class="span9 des-ads">
            	<h5 class="titolo-annunci data-ads"><?php echo $titolo.'<span class="divid-v"></span>'.''.$prezzo; ?></h5>
        <h6><?php echo $country.'<span class="divid-v"></span>'.''.$provincia.'<span class="divid-v"></span>'.''.$citta; ?></h6>

        	<p><?php echo $annuncio; ?></p>
        </div>
    </div>
            
			
	<?php 		 
 }}else{
  echo "Nessun record trovato!";
}
?>
<div class="row-fluid">
	<div class="span12 pagination">
    	<?php 
if ($all_pages > 1){
	echo "<ul>";
  if ($pag > 1){
    echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag -1) . "\">";
    echo "Pagina Indietro</a></li>";
  }
  $maximum_links =10;
  if($all_pages<=$maximum_links) 
            { 
                $maximum_links=$all_pages+1; 
            } 
           else{ 
                  //$maximum_links +1 
                  $maximum_links=$maximum_links+1; 
                   if($pag>=$maximum_links){ 
                       $maximum_links=$pag+1; 
                    } 
              } 
  // faccio un ciclo di tutte le pagine
  for ($p=1; $p<=$maximum_links; $p++) {
    // per la pagina corrente non mostro nessun link ma la evidenzio in blod
    // all'interno della sequenza delle pagine
    if ($p == $pag) echo "<li class='active'><a href'#'><b>" . $p . "</b></a></li>";
    // per tutte le altre pagine stampo il link
    else { 
      echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . $p . "\">";
      echo $p . "</a></li>";
    } 
  }
  if ($all_pages > $pag){
    echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag +1) . "\">";
    echo "Pagina Avanti</a></li>";
  }
  echo "</ul>"; 
}; ?>
    </div>
</div>
 
Ultima modifica:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Mi iscrivo, sono interessato anche io

Inviato dal mio Nexus 5 con Tapatalk
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, bisogna andare a calcolare e modificare le variabili di inizio e di fine ciclo quando si mostrano i link alle pagine.
PHP:
            $maximum_links = 9;
            // inizio ciclo
            $init = $pag <= $maximum_links / 2 ? 1 : ceil($pag - $maximum_links / 2);
            // fine ciclo
            $end = $pag > $maximum_links / 2 ? $pag + $maximum_links / 2 : $maximum_links;
            // faccio un ciclo di massimo 9 iterazioni
            for ($p = $init; $p <= $end; $p++) {
                // per la pagina corrente non mostro nessun link ma la evidenzio in blod
                // all'interno della sequenza delle pagine
Considera anche che in una paginazione è bene mostrare sempre la prima e l'ultima pagina.
Ho solo provato con le pagine iniziali, bisogna vedere come si comporta con quelle finali.
 
Ultima modifica:

migo80

Utente Attivo
25 Apr 2013
243
3
18
Ciao grazie ancora una volta per il tuo aiuto ho apportato una piccola modifica per ottenere l'effetto dell'esempio1 del post precedente.
Posto il codice completo con le modifiche sperando di fare cosa utile.
P.s nel codice faccio uso delle classi di bootstrap.

PHP:
<?php
$x_pag = 10;

$pag = isset($_GET['pag']) ? $_GET['pag'] : 1;
if (!$pag || !is_numeric($pag)) $pag = 1; 

			$mysqli = new mysqli('nome_host, username, password, nome_database');
			$results = $mysqli->query("SELECT * FROM nome_tabella");
			$all_rows = $results->num_rows;

$all_pages = ceil($all_rows / $x_pag);

$first = (($pag  * $x_pag)-$x_pag) ;
			
 			$result = $mysqli->query("SELECT * FROM nome_tabella ORDER BY id DESC LIMIT $first, $x_pag");
$nr = $result->num_rows;
if ($nr != 0){
 for($x = 0; $x < $nr; $x++){
		$row = $result->fetch_assoc(); 
			$id = $row['id'];
			$esempio1 = $row['esempio1'];
			$esempio2 = $row['esempio2'];
			$esempio3 = $row['esempio3'];
                        ....
			....	
?>
            
 	<div class="row-fluid">
        
    	<div class="span3 text-center">
            <?php echo $esempio1; ?>
        </div>
        <div class="span9 des-ads">
            	<?php echo $esempio2; ?>
        <h6><?php echo $esempio3; ?></h6>

        </div>
    </div>
            
			
	<?php 		 
 }}else{
  echo "Nessun record trovato!";
}
?>
<div class="row-fluid">
	<div class="span12 pagination pagination-centered">
    	<?php 
if ($all_pages > 1){
	echo "<ul>";
  if ($pag > 1){
    echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag -1) . "\">";
    echo " &larr; </a></li>";
  }
  $maximum_links =6;
  	$init = $pag <= $maximum_links / 1 ? 1 : ceil($pag - $maximum_links / 1);
    $end = $pag > $maximum_links / 2 ? $pag + $maximum_links / 2 : $maximum_links;
     $sup="8"; // dichiaro variabile per controllo superamento tot pagine
	 // ed eseguo un controlla che nel caso si verifichi mi mastra il link alla pagina numero 1
  if ($pag >= $sup) {echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=1\">";
		echo"1</a></li>
		<li class='disabled'><a href=\"#\">...</a></li>";}
	// faccio un ciclo di tutte le pagine
    for ($p = $init; $p <= $end; $p++) {
		
    // per la pagina corrente non mostro nessun link ma la evidenzio in blod
    // all'interno della sequenza delle pagine
    if ($p == $pag) echo "<li class='active'><a href'#'><b>" . $p . "</b></a></li>";
    // per tutte le altre pagine stampo il link
    else { 
      echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . $p . "\">";
      echo $p . "</a></li>";
    } 
  }
  if ($p > $pag){
    echo "<li><a href=\"" . $_SERVER['PHP_SELF'] . "?pag=" . ($pag +1) . "\">";
    echo " &rarr; </a></li>";
  }
  echo "</ul>"; 
}; ?>
    </div>
</div>

Il risultato ottenuto è il seguente:
<- 1 ... 5 6 7 8 9 10 11 ->

:fonzie:
 
Ultima modifica:

migo80

Utente Attivo
25 Apr 2013
243
3
18
Ho testato meglio lo script purtroppo ho riscontrato il seguente problema e cioè la paginazione continua all'infinito creandomi numeri di pagina anche se non ci sono, lo script è quello del post precedente.... aiutooooo!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
criric ha scritto:
bisogna vedere come si comporta con quelle finali.
più tardi gli do un occhiata, cmq bisogna intervenire sul fine ciclo che non può essere superiore al numero totale di pagine
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
a dir la verita non sono riuscito a testarlo ma dovresti aggiungere un controllo simile prima di effettuare il ciclo
PHP:
             if ($end >= $all_pages - $maximum_links) {
                $end = $all_pages;
                $init = $all_pages - $maximum_links;
            }
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Problema numerazione news PHP 8
K Problema form update PHP 2
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
S Problema nel ciclare un json Javascript 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
K Problema Inner join PHP 1
F firefox problema http Linux e Software 0
N Problema con position absolute e overflow HTML e CSS 4
E Problema jquery Success jQuery 2
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
E problema selezione sfumata Photoshop 2
K [PHP] Problema con variabili concatenate. PHP 1
A Problema filtro fluidifica Photoshop Photoshop 1
H Problema Bordi Scontorno Photoshop 1
O problema con query PHP 4
R Problema installazione Realtek WiFi USB rtl8821 Reti LAN e Wireless 0
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
Y Problema percorso file in rete PHP 1
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
P Problema acquisizione clienti Webdesign e Grafica 1
F NetBeans problema creazione progetto Java Windows e Software 0
M Problema con Try Catch PHP 0
C problema seo + cerco esperto SEO e Posizionamento 11
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
I PROBLEMA: Sostituzione sito XAMPP E-Commerce 0
T problema data 30/11/-1 PHP 0
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Y Problema incolonnamento tabella PHP 7
S problema salvataggio immagini Photoshop 0
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
D problema php mysql PHP 1
D problema php mysql PHP 1

Discussioni simili