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.
Configuration: Windows XP Firefox 3.0.3
16 réponses
-
-
lorsque tu rajoute un champ dans ta base, tu as le choix entre plusieur truc : int, text, varchar et aussi pour les date : date, datetime et time
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 :SELECT ...,DATE_FORMAT(date, '%d/%m/%y à %H:%i') as date
ç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.
-
-
-
-
et bien j'ai appliqué le script et puis ça ne pagine pas...
je ne sais pas ce qui se passe -
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/ -
merci de ce code...seulement il ne s'accorde pas avec ma version de php...
Help! Je suis en détresse! -
-
comme je ne sais pas quel bug tu as...
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 :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.
$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 :
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. -
As-tu changer le $numpage en $page ?
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 ... >