pagination en php

Petit nouveau ! | 4 Messages

29 oct. 2007, 00:13

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

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 oct. 2007, 00:31

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"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 61 Messages

29 oct. 2007, 00:35

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']);
}
?>
Site sur THEOPERATION M.D. -> Nouvelle version (100%)
Ton code, tu indenteras; et le bohneur, tu feras.

Eléphant du PHP | 445 Messages

29 oct. 2007, 00:35

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>'; 

Petit nouveau ! | 4 Messages

29 oct. 2007, 00:46

merci beaucoup je viens de faire la modification et sa marche super bien merci a vous