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.
Configuration: Windows XP
Firefox 3.0.3

16 réponses

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

    Posez votre question
  6. 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
  7. tictactoc
     
    merci de ce code...seulement il ne s'accorde pas avec ma version de php...
    Help! Je suis en détresse!
    0
  8. tictactoc
     
    je vous en supplie! Je suis en détresse!
    0
  9. 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
  10. 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
  11. 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
  12. Mikey_UFC Messages postés 315 Statut Membre 1
     
    le format date dans ta base : ça doit être aaaa-mm-jj
    -1
  13. Mikey_UFC Messages postés 315 Statut Membre 1
     
    Ben, fais voir ton script alors.
    -1
  14. 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
  15. 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
  16. 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
  17. 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