Problème de pagination
tictactoc
-
okuni Messages postés 1325 Statut Membre -
okuni Messages postés 1325 Statut Membre -
Bonjour,
J'ai un problème avec mon script de pagination...Ce n'est surement pas grand chose mais je ne parviens pas à déceler le pb... Je vous donne le script pour m'aider:
<body>
<center>
<div id="body2">
<?php include("****"); ?>
<?php include("***");?>
<bR><br>
<?php
include("identifiants.php");
mysql_connect("***", "***", "***");
mysql_select_db("news");
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour))
{
?>
<div id="news">
<strong>News du <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></strong>
<h2><div id="titre_news"><?php echo $donnees['titre']; ?></div></h2>
<p>
<?php
$contenu = nl2br(stripslashes($donnees['contenu']));
echo $contenu;
?>
</p>
</div>
<br><br>
<?php
}
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM news');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
$nombreDePages = ceil($totalDesMessages / 5);
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
echo '<a href="index.php?page=' . $i . '">' . $i . '</a> ';
}
?>
</p>
<?php
if (isset($_GET['page']))
{
$page = $_GET['page'];
}
else
{
$page = 1;
}
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
mysql_close();
?>
</center>
</div>
</body>
Je vous donne aussi l'adresse du site: http://judex.production.free.fr/
D'avance merci.
J'ai un problème avec mon script de pagination...Ce n'est surement pas grand chose mais je ne parviens pas à déceler le pb... Je vous donne le script pour m'aider:
<body>
<center>
<div id="body2">
<?php include("****"); ?>
<?php include("***");?>
<bR><br>
<?php
include("identifiants.php");
mysql_connect("***", "***", "***");
mysql_select_db("news");
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour))
{
?>
<div id="news">
<strong>News du <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></strong>
<h2><div id="titre_news"><?php echo $donnees['titre']; ?></div></h2>
<p>
<?php
$contenu = nl2br(stripslashes($donnees['contenu']));
echo $contenu;
?>
</p>
</div>
<br><br>
<?php
}
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM news');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
$nombreDePages = ceil($totalDesMessages / 5);
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
echo '<a href="index.php?page=' . $i . '">' . $i . '</a> ';
}
?>
</p>
<?php
if (isset($_GET['page']))
{
$page = $_GET['page'];
}
else
{
$page = 1;
}
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
mysql_close();
?>
</center>
</div>
</body>
Je vous donne aussi l'adresse du site: http://judex.production.free.fr/
D'avance merci.
A voir également:
- Problème de pagination
- Pagination powerpoint - Guide
- Sommaire avec pagination - Guide
- Pagination google doc a partir de la page 3 ✓ - Forum Bureautique
- Le fichier de pagination est insuffisant pour terminer cette opération - Forum PC portable
- Indesign pagination à partir de la 2ème page ✓ - Forum InDesign
16 réponses
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
actuellement, mon script est le suivant:
<html>
<head>
<title>***</title>
</head>
<body>
<?php
if (!$_GET["page"])
{
$page = 1;
}
else
{
$page = $_GET["page"];
}
$nombreDeMessagesParPage = 5;
mysql_connect("***", "***", "***");
mysql_select_db("news");
$premier_message_a_afficher = ($page-1) * $nombreDeMessagesParPage;
$retour = mysql_query("SELECT COUNT(*) AS nb_messages FROM news
LIMIT $premier_message_a_afficher, $nombreDeMessagesParPage");
$totalDesMessages = mysql_result($retour, 0, "nb_messages");
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<center>
<div id="body2">
<?php include("bann.php");
include("menu.php");?>
<div id="dateHeure">
<?php
$jour = date("d");
$mois = date("m");
$annee = date("Y");
echo "Nous sommes le $jour/$mois/$annee.";
?>
</div><div id=clock></div>
<bR><br>
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour))
{
?>
<div id="news">
<strong>News du <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></strong>
<h2><div id="titre_news"><?php echo $donnees['titre']; ?></div></h2>
<p>
<?php
$contenu = nl2br(stripslashes($donnees['contenu']));
echo $contenu;
?>
</p>
</div>
<br><br>
<?php
}
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
echo '<a href="index.php?page=' . $i . '">' . $i . '</a> ';
mysql_close();
?>
<br><br>
</center>
</div>
</body>
</html>
C'est chaud... Pour voir ce que ça donne, allez voir le site: http://judex.production.free.fr/
<html>
<head>
<title>***</title>
</head>
<body>
<?php
if (!$_GET["page"])
{
$page = 1;
}
else
{
$page = $_GET["page"];
}
$nombreDeMessagesParPage = 5;
mysql_connect("***", "***", "***");
mysql_select_db("news");
$premier_message_a_afficher = ($page-1) * $nombreDeMessagesParPage;
$retour = mysql_query("SELECT COUNT(*) AS nb_messages FROM news
LIMIT $premier_message_a_afficher, $nombreDeMessagesParPage");
$totalDesMessages = mysql_result($retour, 0, "nb_messages");
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<center>
<div id="body2">
<?php include("bann.php");
include("menu.php");?>
<div id="dateHeure">
<?php
$jour = date("d");
$mois = date("m");
$annee = date("Y");
echo "Nous sommes le $jour/$mois/$annee.";
?>
</div><div id=clock></div>
<bR><br>
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour))
{
?>
<div id="news">
<strong>News du <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></strong>
<h2><div id="titre_news"><?php echo $donnees['titre']; ?></div></h2>
<p>
<?php
$contenu = nl2br(stripslashes($donnees['contenu']));
echo $contenu;
?>
</p>
</div>
<br><br>
<?php
}
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
echo '<a href="index.php?page=' . $i . '">' . $i . '</a> ';
mysql_close();
?>
<br><br>
</center>
</div>
</body>
</html>
C'est chaud... Pour voir ce que ça donne, allez voir le site: http://judex.production.free.fr/
merci de ce code...seulement il ne s'accorde pas avec ma version de php...
Help! Je suis en détresse!
Help! Je suis en détresse!
comme je ne sais pas quel bug tu as...
je te donne mon script que j'ai fais.
il fonctionne avec un $_GET['page'] qui est la page que tu visualise et $_GET['lien'] qui est le lien pour la pagination.
il y a aussi tout au début une requete qui prend tout ce qui concerne la page ($_GET['page'])
il y a donc dans cette table :
page => le nom de la page que tu affiche ($_GET['page'])
table => le nom de la table utilisé.
nombre_entree_par_page => nombre de donnéée sur une page.
nombre_lien_max => longueur des liens (ex : nombre_lien_max = 5 ça donnera comme affichage :5 liens a gauche du lien sélectionné et 5 a droite)
Grace a ce code, tu peux include ce code partout, tu dois juste ajouter une données dans ta table.
et pour la requete sql, tu dois rajouer a la fin la limit et ici : LIMIT $premier_message, $nombre_entree_par_page
c'est noté tout en haut du script.
voilà :)
n'oublie pas de changer les nom de la table.^^
je te donne mon script que j'ai fais.
<?php
//Pagnination made by Okuni.
/*LIMIT.
LIMIT $premier_message, $nombre_entree_par_page
*/
//On récupère les données propre à la page.
$page = $_GET['page'];
$retour = mysql_query("SELECT * FROM raynal_pagination WHERE page='$page'");
$donnees = mysql_fetch_array($retour) or die (mysql_error());
$table = $donnees['table'];
//On calcule le nombre total d'entrée dans la table.
$retour1 = mysql_query("SELECT COUNT(*) AS nbre_entree FROM $table");
$donnees1 = mysql_fetch_array($retour1) or die (mysql_error());
$total = $donnees1['nbre_entree'];
//On récupère le GET du lien.
if (!empty($_GET['lien']))
{
$lien = intval($_GET['lien']);
}
else
{
$lien = 1;
}
//On indique le nombre d'entrée par page maximum.
$nombre_entree_par_page = $donnees['nombre_entree_par_page'];
//On calcule le nombre de page.
$nombre_de_page = ceil($total / $nombre_entree_par_page);
//On indique le nombre de lien max qu'on va écrire.
$nombre_lien_max = $donnees['nombre_lien_max'];
//préparation au début du for
$nombre_lien_avant = $lien - $nombre_lien_max;
if ($nombre_lien_avant <= 0)
{
$nombre_lien_avant = 1;
}
//préparation a la fin du for.
$nombre_lien_apres = $lien + $nombre_lien_max;
if ($nombre_lien_apres >= $nombre_de_page)
{
$nombre_lien_apres = $nombre_de_page;
}
//On écrit une boucle pour écrire les liens vers les différentes pages.
echo '<div class="pagination">Page :<br/>';
for ($i = $nombre_lien_avant; $i <= $nombre_lien_apres; $i++)
{
//si on commence le for, on vois si on est sur la première page ou pas.
if ($i == $nombre_lien_avant)
{
if ($_GET['lien'] == 1 or $lien == 1)
{
echo '>> ';
echo '<a class="pageActive"><strong><u>'.$i.'</u></strong></a> ';
}
else
{
$i_precedent = $_GET['lien'] - 1;
echo '<a href="?page='.$page.'&lien='.$i_precedent.'">Page précédente</a> ';
echo '<a href="?page='.$page.'&lien='.$i.'">'.$i.'</a> ';
}
}
//on souligne le numéro de la page sélectionnée.
else if ($i == $_GET['lien'])
{
if ($i == $nombre_de_page)
{
//echo 'dernier lien : '.$i;
if ($_GET['lien'] == $nombre_de_page)
{
echo '<a class="pageActive"><strong><u>'.$i.'</u></strong></a> ';
echo '<<';
}
else
{
$i_suivant = $_GET['lien'] + 1;
echo '<a href="?page='.$page.'&lien='.$i.'">'.$i.'</a> ';
echo '<a href="?page='.$page.'&lien='.$i_suivant.'">Page suivante</a> ';
}
}
else
{
echo '<a class="pageActive"><strong><u>'.$i.'</u></strong></a> ';
}
}
//si on termine le for, on vois si on a sélectionné le dernier lien ou pas.
else if ($i == $nombre_lien_apres)
{
//echo 'dernier lien : '.$i;
if ($_GET['lien'] == $nombre_lien_apres)
{
echo '<<';
}
else if (empty($_GET['lien']) and $lien == 1)
{
$i_suivant = 2;
echo '<a href="?page='.$page.'&lien='.$i.'">'.$i.'</a> ';
echo '<a href="?page='.$page.'&lien='.$i_suivant.'">Page suivante</a> ';
}
else
{
$i_suivant = $_GET['lien'] + 1;
echo '<a href="?page='.$page.'&lien='.$i.'">'.$i.'</a> ';
echo '<a href="?page='.$page.'&lien='.$i_suivant.'">Page suivante</a> ';
}
}
//sinon on affiche le lien correspondant a $i.
else
{
echo '<a href="?page='.$page.'&lien='.$i.'">'.$i.'</a> ';
}
}
echo '</div>';
$premier_message = ($lien - 1) * $nombre_entree_par_page;
?>
il fonctionne avec un $_GET['page'] qui est la page que tu visualise et $_GET['lien'] qui est le lien pour la pagination.
il y a aussi tout au début une requete qui prend tout ce qui concerne la page ($_GET['page'])
il y a donc dans cette table :
page => le nom de la page que tu affiche ($_GET['page'])
table => le nom de la table utilisé.
nombre_entree_par_page => nombre de donnéée sur une page.
nombre_lien_max => longueur des liens (ex : nombre_lien_max = 5 ça donnera comme affichage :5 liens a gauche du lien sélectionné et 5 a droite)
Grace a ce code, tu peux include ce code partout, tu dois juste ajouter une données dans ta table.
et pour la requete sql, tu dois rajouer a la fin la limit et ici : LIMIT $premier_message, $nombre_entree_par_page
c'est noté tout en haut du script.
voilà :)
n'oublie pas de changer les nom de la table.^^
$nombreDeMessagesParPage n'est défini nulle part. ( et ceil($totalDesMessages / 5))
Ensuite, il faut gérer le nombre de pages avant l'affichage pour savoir quelle page affichée.
Et ensuite, en changeant ta première requète en :
Ensuite, il faut gérer le nombre de pages avant l'affichage pour savoir quelle page affichée.
Et ensuite, en changeant ta première requète en :
SELECT * FROM news ORDER BY id DESC LIMIT $premierMessageAafficher, $nombreDeMessagesParPage
Tu ne met pas de limit dans ta requete sql.
donc forcément, php va afficher toute tes news sur la même page.
tu dois remplacer $X par le numéro du premier message, ici ce serait $premierMessageAafficher
et $Y par le nombre d'entree par page.
tu devra donc mettre ton système de pagination au dessus de la requete sql.
voilà pour ton problème, mais j'aimerais rajouter une petite chose :
évite ce genre de chose : date('d/m/Y à H\hi', $donnees['timestamp'])
utilise plutot les date SQL, elle sont beaucoup plus maniable qu'un timestamp UNIX.
voilà :)
donc forcément, php va afficher toute tes news sur la même page.
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT $X,$Y');
tu dois remplacer $X par le numéro du premier message, ici ce serait $premierMessageAafficher
et $Y par le nombre d'entree par page.
tu devra donc mettre ton système de pagination au dessus de la requete sql.
voilà pour ton problème, mais j'aimerais rajouter une petite chose :
évite ce genre de chose : date('d/m/Y à H\hi', $donnees['timestamp'])
utilise plutot les date SQL, elle sont beaucoup plus maniable qu'un timestamp UNIX.
voilà :)
Avec ce que tu as mis avant :
A voir pour la date si tu changes ton timestamp en format date, tu n'as qu'à afficher.
Par contre, je n'ai pas tester.
if (!$_GET["numpage"]) $numpage = 1;
else $numpage = $_GET["numpage"];
$nombreDeMessagesParPage = 5;
mysql_connect("***", "***", "***");
mysql_select_db("news");
$premier_message_a_afficher = ($numpage-1) * $nombreDeMessagesParPage;
$retour = mysql_query("SELECT COUNT(*) AS nb_messages FROM news
LIMIT $premier_message_a_afficher, $nombreDeMessagesParPage");
$totalDesMessages = mysql_result($retour, 0, "nb_messages");
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
?>
<body>
<center>
<div id="body2">
<br /><br />
<?php
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour))
{
?>
<div id="news">
<strong>News du <?php echo date('d/m/Y à H\hi', $donnees['timestamp']); ?></strong>
<h2><div id="titre_news"><?php echo $donnees['titre']; ?></div></h2>
<p>
<?php
$contenu = nl2br(stripslashes($donnees['contenu']));
echo $contenu;
?>
</p>
</div>
<br><br>
<?php
}
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
echo '<a href="index.php?page=' . $i . '">' . $i . '</a> ';
A voir pour la date si tu changes ton timestamp en format date, tu n'as qu'à afficher.
Par contre, je n'ai pas tester.
Ce n'est pas très précis tout ça, c'est quoi qui ne marche pas ?
ah oui, je viens de voir entre autre qu'il fallait changer $numpage par $page passé que tu passes dans ton lien.
ah oui, je viens de voir entre autre qu'il fallait changer $numpage par $page passé que tu passes dans ton lien.
As-tu changer le $numpage en $page ?
Si oui, fait des echo de tes variables pour voir où est le problème.
Si oui, fait des echo de tes variables pour voir où est le problème.
Je me permet de vous poster un code très simple pour la pagination en cas où.
<form name="pagination" method="post">
<? if ($entier > 1){ if ($page == 1) {echo"< "; }else {$pr = $page-1; ?><a href="#" onclick="desc('<? echo"$pr"?>')"><?php echo"<"?></a> <? }?>
<? for ($j = 1; $j <= $entier ; $j++){
if ($j != $page){?>
<a href="#" onclick="desc('<? echo"$j"?>')"><?php echo"$j"?></a><?php }else {echo $j;}?>
<? }?>
<? if ($page == $entier) {echo">"; }else {$pr = $page+1; ?><a href="#" onclick="desc('<? echo"$pr"?>')"><?php echo">"?></a><? }}?>
<input type="hidden" name="page" />
</form>
<script language="javascript">
function desc(id)
{
document.pagination.page.value = id;
document.pagination.submit();
}
</script>
Ce code affiche
< 1 2 3 4 ... >
<form name="pagination" method="post">
<? if ($entier > 1){ if ($page == 1) {echo"< "; }else {$pr = $page-1; ?><a href="#" onclick="desc('<? echo"$pr"?>')"><?php echo"<"?></a> <? }?>
<? for ($j = 1; $j <= $entier ; $j++){
if ($j != $page){?>
<a href="#" onclick="desc('<? echo"$j"?>')"><?php echo"$j"?></a><?php }else {echo $j;}?>
<? }?>
<? if ($page == $entier) {echo">"; }else {$pr = $page+1; ?><a href="#" onclick="desc('<? echo"$pr"?>')"><?php echo">"?></a><? }}?>
<input type="hidden" name="page" />
</form>
<script language="javascript">
function desc(id)
{
document.pagination.page.value = id;
document.pagination.submit();
}
</script>
Ce code affiche
< 1 2 3 4 ... >
si tu prend date, tu enregistrera une date sous le format aaaa-mm-jj
datetime : aaaa-mm-jj hh-ii-ss
et time c'est juste l'heure.
et lors d'un SELECT, tu dois mettre juste après (et donc avant le FROM $table) ceci :
ça affichera la date sour forme jj-mm-aa à hh:ii
tu peux bien sur modifier tout ça.
Pour plus d'info, cherche des tuto sur le SQL.