Problème de pagination

tictactoc -  
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.

16 réponses

tictactoc
 
qu'est ce que c'est les dates SQL?
0
okuni Messages postés 1325 Statut Membre 126
 
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.
-1
tictactoc
 
je n'arrive pas à faire marcher le script!
help please!
0
tictactoc
 
Vous allez me trouver embêtant mais ça ne marche toujours pas...
0
okuni Messages postés 1325 Statut Membre 126
 
si tu n'a pas de message d'erreur, d'écrit nous le problème
-1
tictactoc
 
et bien j'ai appliqué le script et puis ça ne pagine pas...
je ne sais pas ce qui se passe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tictactoc
 
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/
0
tictactoc
 
merci de ce code...seulement il ne s'accorde pas avec ma version de php...
Help! Je suis en détresse!
0
tictactoc
 
je vous en supplie! Je suis en détresse!
0
okuni Messages postés 1325 Statut Membre 126
 
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.^^
0
Mikey_UFC Messages postés 315 Statut Membre 1
 
$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
-1
okuni Messages postés 1325 Statut Membre 126
 
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à :)
-1
Mikey_UFC Messages postés 315 Statut Membre 1
 
le format date dans ta base : ça doit être aaaa-mm-jj
-1
Mikey_UFC Messages postés 315 Statut Membre 1
 
Ben, fais voir ton script alors.
-1
Mikey_UFC Messages postés 315 Statut Membre 1
 
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.
-1
Mikey_UFC Messages postés 315 Statut Membre 1
 
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.
-1
Mikey_UFC Messages postés 315 Statut Membre 1
 
As-tu changer le $numpage en $page ?

Si oui, fait des echo de tes variables pour voir où est le problème.
-1
briiiiix Messages postés 624 Statut Membre 18
 
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 ... >
-1