[RISOLTO] paginazione PHP + mysql

  • Creatore Discussione Creatore Discussione Hackx
  • Data di inizio Data di inizio

Hackx

Utente Attivo
20 Ago 2013
108
0
16
Ciao a tutti,

Innanzitutto ecco qui il mio codice:

PHP:
<?php 

include "config.php";

$pag = (isset($_GET["pag"]));
if (isset($pag) == false || is_numeric($pag) == false ||  $pag < 1)
{
     $pag = 1;
}

$fine = 5;
$inizio = ($pag - 1) * $fine;

$query = mysqli_query($conn, "SELECT * FROM nome_tabella LIMIT " . $inizio . "," .$fine) or die (mysqli_error());
$quanti = mysqli_num_rows($query);

while ($row = mysqli_fetch_assoc($query)) {
echo $row['nome'].'<br/>';
echo $row['descrizione'].'<br/><hr>';
}

if ($quanti == 0)
{
     echo "Nessun record";
}
else 
{
     for($x=0; $x<$quanti; $x++)
	 {
	     $rs = mysqli_fetch_row($query);
		 $nome_campo = $rs[0];

?>


<p><?phpecho $nome_campo;?></p>


<?php

     }
	
}

     $query = mysqli_query ($conn, "SELECT * FROM nome_tabella");
	 $quanti = mysqli_num_rows ($query);
	 
		$intero = $quanti / $fine;

?>

<p> Pagina <?php echo $pag; ?> di <?php echo $intero; ?></p>

<p>

<?php

     for($x=1; $x<$intero+1; $x++)
	 {
	     if($x == $pag)
		 {
		 
?>

<b> <? echo $x; ?> </b> |

<?php

     }
	 else
	 {

?>

<a href="paginazione.php?pag=<?php echo $x; ?>"> <?php  echo $x; ?> </a> |

<?php 

     }
}

?>

</p>

<?php

     mysqli_close($conn);

?>

Per la prima pagina mi mostra correttamente tutti i 5 risultati che voglio ..ma il problema è che ci sono due pagine .. cliccando sul "link della pagina due" mi mostra i record della prima pagina.. però cambiando il link principale con la ".php?pag=2"

Quindi la mia domanda è:
Come posso riuscire a cambiare pagina, cambiando anche i record ?

Spero di essermi spiegato :)

Ringrazio moltissimo in anticipo,
Andrea
 
...prova a modificare..
PHP:
<a href="paginazione.php?pag=<?php echo $x; ?>"> <?php  echo $x; ?> </a>

con

PHP:
<a href="paginazione.php?pag=<?php echo $x+1; ?>"> <?php  echo $x+1; ?> </a>
 
...prova a modificare..
PHP:
<a href="paginazione.php?pag=<?php echo $x; ?>"> <?php  echo $x; ?> </a>

con

PHP:
<a href="paginazione.php?pag=<?php echo $x+1; ?>"> <?php  echo $x+1; ?> </a>

Ciao Bedo :)

Innanzitutto grazie della risposta.
Guarda ho provato .. ma così facendo modifica solo il numero incrementandolo di 1.. ovvero invece che 2 e 3 diventa 3 e 4 .. ma purtroppo l'errore rimane.

Andrea
 
...forse nn ho capito la tua domanda...
...il problema è l'indice del link alla pagina successiva ( php?pag=indiceerrato )
..o la pagina successiva si carica ma i record contenuti sono quelli della pagina precedente...?
 
Ciao, il problema è qui
PHP:
$pag = (isset($_GET["pag"]));
correggi
PHP:
$pag = $_GET["pag"];
@Borgo
sta già utilizzando mysqli ( è uno dei pochi :) )

EDIT

meglio ancora modifica i primi controlli cosi
PHP:
$pag = 1;
if (isset($_GET["pag"]) && is_numeric($_GET["pag"]) && $_GET["pag"] > 0) {
    $pag = $_GET["pag"];
}
 
Ultima modifica:
Finalmente :D !

Alla fine ho risolto con ciò che mi è stato suggerito da criric :

PHP:
$pag = 1;
if (isset($_GET["pag"]) && is_numeric($_GET["pag"]) && $_GET["pag"] > 0) {
    $pag = $_GET["pag"];
}

Grazie mille a tutti davvero :)
Andrea


P.S.
Volevo domandarvi un'altra cosuccia riguardo sempre all'impaginazione.

Ad esempio per i "file" di un database ...

si usa il costrutto SELECT più LIMIT per "limitare" i file estratti
+
il classico costrutto SELECT * FROM per l'estrazione

---------------------------------------------------------------------------------------

Ecco le mie domande:

1) Ma se dovessi limitare dei file immagine estratti da una CARTELLA FISICA come potrei fare?
2) e per la semplice estrazione ?

Vi ringrazio ancora per l'attenzione :)

Cordiali saluti,
Andrea
 
ciao a tutti
ho seguito l'esempio del primo link applicandolo al mio codice e funziona.
ho aggiunto la stampa a video della pagina corrente.

ma se volessi visualizzare il menù delle pagine così:

Pagine: < ... 4 [5] 6 ... >

dove nell'esempio :
[5] è la pagina corrente
4 e 6 le pagine più vicine (ma va?? :D)
<... e ...> manda avanti o indietro di 1.

... proprio non ci arrivo!! scusate l'ignoranza.
 
Ciao, devi prima recuperare il numero totale di pagine, seguendo il codice sopra
PHP:
$tot_pagine = ceil($quanti / $fine);
poi con un ciclo for le mostri
PHP:
for ($i = 1; $i <= $tot_pagine; $i++) {
    echo "<a href='paginazione.php?pag=$i'>$i</a>";
}
 
grazie!
intanto avevo risolto con un controllo sulle pagine precedenti e successive, in base al primo e all'ultimo record.

nell'esempio che mi hai fatto, il file paginazione.php sarebbe la mia pagina principale, giusto?
 
perfetto!

ho aggiunto un controllo sulla pagina corrente
PHP:
 $pag = $_GET['pag'];
                        echo "Pages:";

                        for ($i = 1; $i <= $all_pages; $i++) { 
 
                               if($i == $pag) echo "[$i]";
                               else
                               echo "<a href='index.php?pag=$i'>$i</a>"; 
                        }
perfetto!

ora ho tutto il tempo per ragionarci su, in attesa di avere un database più "pieno" e la visualizzazione più completa (con i bottoni di avanzamento < e >)
 
Ultima modifica di un moderatore:
rieccomi qua.

mi sono accorto di una cosa, un piccolo particolare.

http://www.nowheels.it

quando accedo alla pagina, e vado in basso a leggere le news, vedo la stampa delle pagine così:

pages: 1 2 3

le due [ ] le visualizza solo dopo che ho cliccato su una di queste pagine (pure se clicco sulla stessa pagina)

in effetti, nella barra degli indirizzi, appena entro nel sito vedo scritto "http://www.nowheels.it/", cliccando sulle pagine per scorrere le news, comincio a leggere http://www.nowheels.it/index.php?pag=1 (e a questo punto appaiono le parentesi quadre sulla pagina attiva.
 
Ciao, modifica questo
PHP:
$pag = $_GET['pag'];
con
PHP:
$pag = 1;
if (isset($_GET['pag']) && is_numeric($_GET['pag'])) {
    $pag = $_GET['pag'];
}
 
perfetto, grazie!!!

per capire, questo codice controlla che il parametro non sia nullo e che sia numerico, giusto?
 
Esatto, tradotto in italiano diventa
Codice:
se( è settato ed è numerico ) {
altrimenti rimane valida la prima istruzione
PHP:
$pag = 1;
 

Discussioni simili