tonguim Posté 30 Octobre 2005 Posté 30 Octobre 2005 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>
e.MiLoU Posté 31 Octobre 2005 Posté 31 Octobre 2005 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...
tonguim Posté 31 Octobre 2005 Auteur Posté 31 Octobre 2005 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>
e.MiLoU Posté 31 Octobre 2005 Posté 31 Octobre 2005 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>';?>
tonguim Posté 31 Octobre 2005 Auteur Posté 31 Octobre 2005 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>
tonguim Posté 1 Novembre 2005 Auteur Posté 1 Novembre 2005 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant