Aller au contenu

script de pagination ne marche pas


tonguim

Sujets conseillés

Bonsoir,

Je voudrais réaliser un script en php qui affiche tous les enregistrements de ma base de données (10 enregistrements par page, en 2 colonnes: donc 5 enregistrements par colonnes); de plus je voudrais paginer toutes les pages que j'obtiendrais, de cette manière: 1, 2, 3, .... (1, 2, 3, ... étant des nombres hyperactifs; cela signifie qu'en cliquant sur "1", je vais sur la première page; sur "2" sur la 2e page etc.)

Mon code que voici, ne m'affiche rien du tout: juste le titre de la page avec les numéros hyperactifs 1, 2, 3 ... Il n'ya aucune erreur php; les noms des champs de la table, et le nom de la table sont bien justes. A mon avis, le problème se situe problablement au niveau des boucles (while et for). Pouvez vous m'aider à détecter ce qui ne va dans mon code? Merci

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
      <title>Title here!</title>
</head>
<body>
 <table>
 <tr>
 <td colspan="2"><h2><center>Actualités</center></h2>
 </td>
 </tr>
 <tr>
 <td>
<?php
 include("connexion.php");
 
 $requete=mysql_query("select * from articles order by date desc"); //query
 $nombreLignes=mysql_num_rows($requete); //nombre d'enregistrements total de la bd
 $nombreArticlePage=10; //nombre d'article par column
 $nombrePg=ceil($nombreLignes/$nombreArticlePage); //nombre total de pages qui seront affichées  
 $numPgUrl=@$_GET["num"]; //numero de la page dans l'url
 $numPgCour=0;
 $col1=0; //premiere colonne du tableau html
 $col2=0; //deuxième colonne du tableau html
 while($numPgCour < $numPgUrl)
       {
   for($i = 1; $i<=$nombreArticlePage/2; $i++)
   {
   mysql_fetch_array($requete);
   }
   $numPgCour++;
 }
 for($i = 1; $i<=$nombreArticlePage/2; $i++)
 {
   if ($col1=mysql_fetch_array($requete) == 0) break;
   if ($col2=mysql_fetch_array($requete) == 0) break;
           echo "<tr><td><b>" .$col1['titre']. "</b></td><td><b>".$col2['titre']."</b></td></tr>
             <tr><td>" .$col1['resume']. "</td><td>" .$col2['resume']. "</td></tr>";
       }  
 ?>Page<?
 for($i = 1; $i<=$nombrePg; $i++)
 {
     if($numPgUrl == $i)
   {
         echo $i;
     }
   else
   { ?>
         <a href="?num=<? echo $i ?>"
       > <? echo $i; ?> </a>
     <? }
 }      
?>
 </table>
</body>
</html>

Lien vers le commentaire
Partager sur d’autres sites

Déjà quelques commentaires d'optimisation... Je ne comprends pas pourquoi tu mets ce morceau de code

while($numPgCour < $numPgUrl)
       {
  for($i = 1; $i<=$nombreArticlePage/2; $i++)
  {
   mysql_fetch_array($requete);
  }
  $numPgCour++;
 }

Ne serait-ce pas plus facile de faire un SELECT avec un limite?? Du genre:

"SELECT titre,resume FROM articles SELECT BY DATE LIMIT $nbPage*$nombreArticlePage, ($nPage+1)*$nombreArticlePage" (=> non-vérifié, mais ça devrait marcher ;) )

Et ici

for($i = 1; $i<=$nombreArticlePage/2; $i++)
 {
  if ($col1=mysql_fetch_array($requete) == 0) break;
  if ($col2=mysql_fetch_array($requete) == 0) break;
          echo "<tr><td><b>" .$col1['titre']. "</b></td><td><b>".$col2['titre']."</b></td></tr>
            <tr><td>" .$col1['resume']. "</td><td>" .$col2['resume']. "</td></tr>";
 }  

Je crois qu'il ne faut pas diviser par deux dans ton test du for... En plus dans le test avec $col2, tu pourrais perdre un article pcq $col1 contient quelque chose mais $col2 pas (j'espère que tu as suivi ;) )

Essaie avec ces quelques changements et dis-nous si il y a une différence...

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir e.milou,

j'ai effectue de grands changements dans le code ... qui est plus logique maintenant. Les enregistrements ne s'affichent toujours pas.

<html>
<body>
<?
 include("connexion.php");  

 $nbMsgPage = 3;

 $requete = mysql_query('select count(*) as nb_messages from articles');
 $resultat = mysql_fetch_array($requete);
 $nbMsgTotal = $resultat['nb_messages'];

 $nbPages = ceil($nbMsgTotal / $nbMsgPage);

 echo 'Page : ';
 for ($i=1; $i<=$nbPages; $i++)
 {
 echo '<a href="pagination7.php?page=' . $i . '">' . $i . '</a> ';
 }
 //$requete = mysql_query('select * from articles order by date desc limit 0, $nbMsgPage');
?>
<?
 $page=1; // par defaut, on est sur la premiere page
 if(isset($_GET['page'])) // si on a un parametre dans l'url
 {
 $page=(int)$_GET['page']; // on le recupere, le (int) devant c'est pour s'assurer de recuperer un nombre
 }
 // on verifie si on n'a pas 0 dans $page
 if ($page<=0) // si on a 0 ou un nombre negatif
 $page=1; // on se remet sur la premiere page

 // on est qu'on est au moins sur la première page
 // calcul de la valeur a utiliser dans LIMIT pour le debut
 $debut=($page-1)*$nbMsgPage;
 
 //requete pour chercher les articles adequats a la page où on se trouve :
 $requete=mysql_query('select * from articles order by date desc limit '.$debut.', '.$nbMsgPage);
 ?><table><?
 
 //ci dessous je divise parce que je veux afficher les articles en 2 colonnes sur chaque page
 while((($ligne1=mysql_fetch_array($requete))!=0) && (($ligne2=mysql_fetch_array($requete))!=0))
 {
 if (($ligne1=mysql_fetch_array($requete)) == 0) break;
 if (($ligne2=mysql_fetch_array($requete)) == 0) break;
?>
<?  
 echo "<tr><td><b>" .$ligne1['titre']. "</b></td><td><b>".$ligne2['titre']."</b></td></tr>
       <tr><td>" .$ligne1['resume']. "</td><td>" .$ligne2['resume']. "</td></tr>";
}
?></table>
</body>
</html>

Lien vers le commentaire
Partager sur d’autres sites

Voilà, j'ai quelque peu modifier... Dis-moi ce que ça donne


<?


include('connection.php');

$nbMsgPage = 10;

// On va chercher le nombre de messages
$requete = mysql_query('select count(*) as nb_messages from articles');
$resultat = mysql_fetch_array($requete);
$nbMsgTotal = $resultat['nb_messages'];

// On en détermine le nombre de pages
$nbPages = ceil($nbMsgTotal / $nbMsgPage);

// On affiche les liens pour les différentes pages
echo 'Page : ';
for ($i=1; $i<=$nbPages; $i++)
{
echo "<a href=\"?page=$i\">$i</a> ";
}


// On détermine la page
$page = 1; // Par defaut, on est sur la premiere page
// Si on a un parametre dans l'url et que c'est un nombre supérieur à 0
if(isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page'] > 0)
{
$page = (int)$_GET['page'];
}


// Calcul de la valeur a utiliser dans LIMIT pour le debut et la fin
$debut = ($page-1)*$nbMsgPage;

// Requête pour chercher les articles adequats a la page où on se trouve :
$sql = "SELECT titre,resume FROM articles ORDER BY nom LIMIT $debut, $nbMsgPage "; // A MODIFIER
$sql = mysql_query($sql) or die(mysql_error());

echo '<table>';

// Ci-dessous je divise parce que je veux afficher les articles en 2 colonnes sur chaque page
$i = 0;
echo '<tr>';
while( $ligne1 = mysql_fetch_array($sql) )
{
if ($ligne2 = mysql_fetch_array($sql) == 0)
{
$ligne2['titre'] = ' ';
$ligne2['resume'] = ' ';
}
echo '</tr><td><b>'.$ligne1['titre'].'</b></td><td><b>'.$ligne2['titre'].'</b></td></tr>';
echo '</tr><td>'.$ligne1['resume'].'</td><td>'.$ligne2['resume'].'</td></tr>';
}

echo '</table>';

echo '</table>';
echo '</body>';
echo '</html>';

?>

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir e.Milou,

j'ai essayé ton code; il affiche des enregistrements seulement sur la première page, et pas sur les autres. J'ai encore modifié mon code, mais le résultat est le même: les enregistrements ne s'affichent pas. Je pense que le problème vient de mes boucles, mais quoi precisement. Merci de m'aider.

<html>

<body>

<?

  include("connexion.php"); 

  $nbMsgPage = 3;

  $requete = mysql_query('select count(*) as nb_messages from articles');

  $resultat = mysql_fetch_array($requete, MYSQL_ASSOC);

  $nbMsgTotal = $resultat['nb_messages'];

  $nbPages = ceil($nbMsgTotal / $nbMsgPage);

  echo 'Page : ';

  for ($i=1; $i<=$nbPages; $i++)

  {

  echo '<a href="pagination7.php?page=' . $i . '">' . $i . '</a> ';

  }

  //$requete = mysql_query('select * from articles order by date desc limit 0, $nbMsgPage');

?>

<?

  $page=1; // par defaut, on est sur la premiere page

  if(isset($_GET['page'])) // si on a un parametre dans l'url

  {

  $page=(int)$_GET['page']; // on le recupere, le (int) devant c'est pour s'assurer de recuperer un nombre

  }

  // on verifie si on n'a pas 0 dans $page

  if ($page<=0) // si on a 0 ou un nombre negatif

  $page=1; // on se remet sur la premiere page

  // on est qu'on est au moins sur la première page

  // calcul de la valeur a utiliser dans LIMIT pour le debut

  $debut=($page-1)*$nbMsgPage;

 

  //requete pour chercher les articles adequats a la page où on se trouve :

  $requete=mysql_query('select * from articles order by date desc limit '.$debut.', '.$nbMsgPage);

  ?><table><?

 

  //ci dessous je divise parce que je veux afficher les articles en 2 colonnes sur chaque page

  while(($ligne1=mysql_fetch_array($requete, MYSQL_ASSOC))!=0)

  { 

  if (($ligne2=mysql_fetch_array($requete, MYSQL_ASSOC)) == 0)

?>

<? 

  echo "<tr><td><b>" .$ligne1['titre']. "</b></td><td><b>".$ligne2['titre']."</b></td></tr>

        <tr><td>" .$ligne1['resume']. "</td><td>" .$ligne2['resume']. "</td></tr>";

}

?></table>

</body>

</html>

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

mon code marche maintenant; voici la bonne version:

<html>

<body>

<?

  include("connexion.php"); 

  $nbMsgPage = 10;

  $requete = mysql_query('select count(*) as nb_messages from articles');

  $resultat = mysql_fetch_array($requete, MYSQL_ASSOC);

  $nbMsgTotal = $resultat['nb_messages'];

  $debut=0;

  $nbPages = ceil($nbMsgTotal / $nbMsgPage);

  echo 'Page : ';

  for ($i=1; $i<=$nbPages; $i++)

  {

  echo '<a href="pagination8.php?page=' . $i . '">' . $i . '</a> ';

  }

  //$requete = mysql_query('select * from articles order by date desc limit 0, $nbMsgPage');

?>

<?

  $page=1; // par defaut, on est sur la premiere page

  if(isset($_GET['page'])) // si on a un parametre dans l'url

  {

  $page=(int)$_GET['page']; // on le recupere, le (int) devant c'est pour s'assurer de recuperer un nombre

  }

  // on verifie si on n'a pas 0 dans $page

  if ($page<=0) // si on a 0 ou un nombre negatif

  $page=1; // on se remet sur la premiere page

  // on est qu'on est au moins sur la première page

  // calcul de la valeur a utiliser dans LIMIT pour le debut

  $debut=($page-1)*$nbMsgPage;

  //requete pour chercher les articles adequats a la page où on se trouve :

  //$requete=mysql_query('select * from articles order by date desc limit '.$debut.', '.$nbMsgPage);

  $requete=mysql_query('select * from articles order by date desc limit '.$debut.', '.$page*$nbMsgPage); 

  ?><table><? 

  //ci dessous je divise parce que je veux afficher les articles en 2 colonnes sur chaque page

  $i=0;

  echo"<tr>";

  while(($ligne=mysql_fetch_array($requete))

  { 

  $i++; 

  echo "<td><b>" .$ligne1['titre']. "</b></td>";

  if($i==2)]

  {

    echo"</tr><tr>";

    $i=0;

  }

  }

  echo"</tr>";

?>

</table>

</body>

</html>

Merci a tous

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...