Problema su numerazione paginazione php

migo80

Utente Attivo
25 Apr 2013
238
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
238
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
238
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
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
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
M Problema Wi-Fi Linux Linux e Software 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
Daniele_Carrara Problema Aperture Mailup Email Marketing 5
F PROBLEMA ACCESSO INSTAGRAM Discussioni Varie 2
R Problema connessione db PHP 7
M problema if PHP 2
G Problema con Get page PHP 4
N Problema passaggio variabili tra pagine PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 1
H problema carrello woocommerce PHP 2
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
M Problema su query JOIN in tre tabelle PHP 0
S Problema esportazione tabelle Mysql in Excel PHP 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
M Problema su update di 3 tabelle PHP 1
T problema con select dinamica con jquery Javascript 0
A Problema checkout carrello php PHP 2
R Problema al server Domini 0
A Problema nel passare la variabile PHP 0
G Problema update di un database PHP 0
S Problema con spazi bianchi HTML e CSS 4
E Problema motore di ricerca FULL_TEXT PHP 0
Tommy03 Problema durata cookie PHP 5
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0

Discussioni simili