Page 1 sur 1

pagination en php

Posté : 29 oct. 2007, 00:13
par SonicDark
salut voila j'ai fait une page pour mon site pour afficher les membres inscrits, donc j'ai aussi une systeme de pagination, mais le probleme est que sur toute les pages j'ai la même chose qui s'affiche, que dois-je changer dans mon code ?

voici mon code source de la page :
<?php
include('config.inc.php');
?>
<html>
<head>
<title><?php echo "$titre"; ?></title>
<link title="style" type="text/css" rel="stylesheet" href="style/style.css">
<script type="text/javascript" src="javascript/search.js"></script>
</head>
<body>
<div id="ban"><?php echo "$ban"; ?></div>
<table cellspacing="0" cellpadding="0">
<tr>
<td class="menu" valign="top"><?php echo "$menu"; ?></td>
<td class="contenu" valign="top">
<table width="100%" cellspacing="0" cellpadding="3">
<tr>
<td class="date_home">
<?php
$date = date("d-m-Y");
$heure = date("H:i");
Print("Nous sommes le $date et il est $heure");
?>
</td>
</tr>
</table>
<br>
<table align="center" cellspacing="0" cellpadding="3">
<tr>
<td class="dernier_inscrit_index_titre" valign="top">
<b>La liste des joueurs</b>
</td>
</tr>
<tr>
<td class="liste_joueurs">

<?php
// Numéro de la page à afficher

$page = 0;
if(isset($_GET['page']) && is_int($_GET['page'])) {
$page = $_GET['page'];
}

// Nombre de résultats par page

$nb = 2;
if(isset($_GET['nb']) && is_int($_GET['nb'])) {
$nb = $_GET['nb'];
}

// Connexion au serveur de base de données

$conn =  mysql_connect("$host", "$login", "$mdp");
mysql_select_db($db);

// Connexion à la base de données

$dba = mysql_select_db($db);
if(!$dba) {
die('Impossible de se connecter à la base de données.');
}

// Nombre total d'enregistrements

$sql = 'SELECT COUNT(*) FROM online_game;';
$query = mysql_query($sql, $conn) or die('Erreur MySQL : '.mysql_error());
$row = mysql_fetch_row($query);
$total = $row[0];

// Nombre maximum de pages

$max_pg = ceil($total / $nb);

// Selection des enregistrements pour la page considérée

$sql = 'SELECT * FROM online_game ORDER BY id DESC LIMIT '.($page * $nb).','.$nb.'';
$query = mysql_query($sql, $conn) or die('Erreur MySQL : '.mysql_error());
?>

<?php
while($list = mysql_fetch_assoc($query))
{
?>
<table align="center"><tr><td class="liste_joueur_membre">
<b><?php echo $list['pseudo']; ?></b><br />
Son jeu favoris : <?php echo $list['jeu_favoris']; ?><br />
<i>>><a href="JOUEURS/<?php echo $list['pseudo']; ?>.html">Voir son profil</a><<</i><br />
</td></tr></table><br>

<?php
}
mysql_close();
?>
<p>Pages :
<?php
for($i = 0 ; $i < $max_pg ; $i++) {
echo ' <a href="?page='.$i.'">'.$i.'</a>';
}
?>
</td>
</tr>
</table>
<br>
</td>
</tr>
</table>
<div id="copyright"><?php echo "$footmessage";?></div>
</body>
</html>
merci

Posté : 29 oct. 2007, 00:31
par Truc
Salut,

Le souci vient de is_int() qui dit
Pour tester si une variable est un nombre ou une chaîne numérique (comme les entrées de formulaire, qui sont toujours des chaînes), vous devez utiliser la fonction is_numeric().
Donc ce test
$page = 0;
if(isset($_GET['page']) && is_int($_GET['page'])) {
$page = $_GET['page'];
} 
n'est jamais vérifié et $page vaut toujours 0

De même pour le nombre "$nb"

Posté : 29 oct. 2007, 00:35
par Power Web
intval() est bien aussi et je préfère comme ça il n'y a pas besoin de condition ;)
<?php
if(isset($_GET['page']))
{
     $page = intval($_GET['page']);
}
?>

Posté : 29 oct. 2007, 00:35
par h0_noMan
Salut.
is_int($_GET['page'])
Seras toujours FALSE (meme si page=1)
Essayes plutot un
$page = intval($_GET['page']);
Et apres tu verifieras si la page est valide.

* Au lieu de 2 SQL tu pourrais n'en avoir qu'un et recuperer le nombre d'enregistrement avec mysql_num_rows()

* Après ton
$max_pg = ceil($total / $nb); 
Verifie que $page est bien inférieur ou égal à $max_pg.

* A la fin pour afficher toutes les pages, ne mets pas de lien sur la page actuelle
if($i != $page) echo ' <a href="?page='.$i.'">'.$i.'</a>'; 

Posté : 29 oct. 2007, 00:46
par SonicDark
merci beaucoup je viens de faire la modification et sa marche super bien merci a vous