Pagination

goliath1 -  
 goliath1 -
Bonjour,
J'ai trouvé un code de pagination que je tente d'adapter au mieux à mes besoins pour extraire des données dans une base mysql. J'arrive a extraire les données avec la pagination qui apparait en bas de page. Seulement elle ddbute à la page 0 au lieu de la page 1.
Quelqu'un peut -il m'pporter quelques conseils. D'avance merci.
M.G.

<HTML>
<HEAD>
<TITLE>DOCUMENT TITLE</TITLE>
<META HTTP-EQUIV="DESCRIPTION" CONTENT="">
<META HTTP-EQUIV="KEYWORDS" CONTENT="">
<META HTTP-EQUIV="GENERATOR" CONTENT="MPS HTMLGATE FREE">
<META HTTP-EQUIV="AUTHOR" CONTENT="">
</HEAD>
<BODY>
<?php
// Numéro de la page à afficher
$page = "";
if(isset($_GET['page'])) {
$page = intval($_GET['page']);
}
// Nombre de résultats par page
$nb = 10;
if(isset($_GET['nb'])) {
$nb = max(intval($_GET['nb']), $nb); // Assure au moins $nb résultats par page
}
// Connexion au serveur de base de données
include ("adm/connex.php"); //parametres de connexion
$db = mysql_connect($host, $user, $password);
$db = mysql_select_db($pinochio,$db); //nom de la base
if(!$db) {
die('Impossible de se connecter à la base de données.');
}
$sql = "SELECT COUNT(*) AS id FROM poupees";
$query = mysql_query($sql, $db) 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 id, pays, district, fr, image1 FROM poupees
LIMIT '.($page * $nb).','.$nb.'
';
$query = mysql_query($sql, $db) or die('Erreur MySQL : '.mysql_error());
?>
<p>Page actuelle : <?= $page ?></p>
<p>Nb d'enregistrements par page : <?= $nb ?></p>

<table>
<tr>
<th>Ident.</th>
<th>Pays</th>
<TH>District</th>
<th>Synopsys</th>
<th>Photo</th>
</tr>

<?php

while($ligne = mysql_fetch_array($query)) {

echo '<tr>';
echo '<td width="30"><font color="#ff8000"><b><p align center>'.$ligne['id'].'</p></b></td>';
echo '<td width="165"><font color="#ff6633"><b><p align center>'.$ligne['pays'].'</p></b></font></td>';
echo '<td width="165"><p align center>'.$ligne['district'].'</p></td>';
echo '<td width="140"><p align center><i>'.$ligne['fr'].'</i></p></td>';
echo '<td width="50"><center>'.$ligne['image1'].'</center></td>';
echo '</tr>';

}
?>

</table>
<p>Pages :
<?php

for($i = 1 ; $i < $max_pg ; $i++) {
echo ' <a href="?page='.$i.' &nb='.$nb.'">'.$i.'</a>';
}
?>
</p>
<p>Nb d'enregistrements par page :

<a href="?page=<?= $page ?>&nb=10">10</a>
<a href="?page=<?= $page ?>&nb=20">20</a></p>

</BODY>
</HTML>Bonjour,

2 réponses

goliath1
 
bonjour

J'ai réussi finalement à trouver, mais j'ai un autre problème à la partie du code mise en italique. Il s'agit des réponses lues dans la base de données et je voudrais l'incrémentation des lignes. La numérotation s'affiche de 1 à 10 pour chaque page. Je voudrais qu'il y ait continuité sur l'ensemble.
A savoir :
-pour la page 1 : 1,2,3,4,5,6,7,8,9,10
-pour la page 2 : 11,12,13,14,15,16,17,18,19,20
etc........
Je n'arrive pas à régler ce problème.
Quelqu'un peut-il m'aider ? Merci d'avance.

<BODY>
<?php
// Numéro de la page à afficher
$page = 0;
if(isset($_GET['page'])) {
$page = intval($_GET['page']);
}

// Nombre de résultats par page
$nb = 10;
if(isset($_GET['nb'])) {
$nb = max(intval($_GET['nb']), $nb); // Assure au moins $nb résultats par page
}
// Connexion au serveur de base de données
include ("adm/connex.php"); //parametres de connexion
$db = mysql_connect($host, $user, $password);
$db = mysql_select_db($pinochio,$db); //nom de la base
if(!$db) {
die('Impossible de se connecter à la base de données.');
}
$sql = "SELECT COUNT(*) AS id FROM poupees";
$query = mysql_query($sql, $db) 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 id, pays, district, fr, image1 FROM poupees
LIMIT '.($page * $nb).','.$nb.'
ORDER by pays
';

$query = mysql_query($sql, $db) or die('Erreur MySQL : '.mysql_error());
?>
<p>Page actuelle : <?= $page+1 ?></p>
<p>Nb d'enregistrements par page : <?= $nb ?></p>

<table>
<tr>
<th>Ident.</th>
<th>Pays</th>
<TH>District</th>
<th>Synopsys</th>
<th>Photo</th>
</tr>

<?php
$comp = 1 ;
while($ligne = mysql_fetch_array($query)) {
extract($ligne);
echo '<tr>';
echo '<fieldset>';
echo '<td width="30"><p align center>'.$comp.'</p></td>';
echo '<td width="165"><p align center>'.$ligne['pays'].'</p></td>';
echo '<td width="165"><p align center>'.$ligne['district'].'</p></td>';
echo '<td width="140"><p align center><i>'.$ligne['fr'].'</i></p></td>';
echo '<td width="50"><center>'.$ligne['image1'].'</center></td>';
echo '</tr>';
$comp++ ;
echo '</fieldset>';
}
?>

</table>
<p>Pages :
<?php

for($i = 0 ; $i < $max_pg ; $i++) {
$page = $i+1;

echo ' <a href="?page='.($page -1).' &nb='.$nb.'">'.$page.'</a>';
}

?>
</p>
<p>Nb d'enregistrements par page :

<a href="?page=<?= $page ?>&nb=10">10</a>
<a href="?page=<?= $page ?>&nb=20">20</a></p>

</BODY>
0
macgawel Messages postés 676 Statut Membre 89
 
Bonjour.

// Numéro de la page à afficher
$page = "";
if(isset($_GET['page'])) {
$page = intval($_GET['page']);
} 

Ici, il y a un problème : $page est sensé être un nombre (vu ce que tu en fais après).
Mais si tu appelles la page sans paramètre (la première fois, par exemple), $page = "";. C'est illogique.
// Selection des enregistrements pour la page considérée
$sql = '
SELECT id, pays, district, fr, image1 FROM poupees
LIMIT '.($page * $nb).','.$nb.' 

Avec cette façon de faire, pour afficher la première page, il faut donner la valeur zéro à $page.

Je te propose :
// Selection des enregistrements pour la page considérée
$sql = '
SELECT id, pays, district, fr, image1 FROM poupees
LIMIT '.( ($page - 1) * $nb).','.$nb.' 

Quand $page = 1, tu affiches les enregistrements à partir de l'enregistrement "zéro" (le premier, donc).

Du coup, par défaut donne la valeur 1 à $page et assure-toi que $page est toujours au moins égal à 1 :
// Numéro de la page à afficher
$page = 1;
if(isset($_GET['page'])) {
$page = intval($_GET['page']);
}
if ($page < 1 ) { $page = 1);
-1
goliath1
 
Bonsoir,
D'abord merci de m'avoir répondu. Je vois que tu as bien compris le but de ma question c'est àdire de faire correpondre la page 1 avec la première série d'affichage et ainsi de suite. Hélas, j'ai refait les essais, mais ça ne fonctionne toujours pas. J'avoue ne rien comprendre.... Peut être puis-je solliciter une nouvelle aide ?

Au début je mets :
$page = 0;

if ($page <1) {$page =1} ( provoque une erreur de syntaxe.)

LIMIT '. (($page-1) * $nb) .','.$nb.' (donne l'affichage des deux nombres après LIMIT -10, 10)

A la fin si je mets :
for ($ = 0 ; $i < max_pg; $i++ { etc..... (la pagination en débute 0, 1,2,3 etc......mais tout s'affiche)
for ($ = 1 ; $i < max_pg; $i++ { etc..... (la pagination en débute 1,2,3 etc...... mais la première page d'affichage est occultée, à savoir l'affichage commence à partir de la 11° ligne sachant que je mets dix lignes par page )


Par contre si au début, je mets :
$page=1; il se produit une erreur à la ligne <p>page actuelle : <? $page ?></p>

Merci d'avance.
M.G
0