Page 1 sur 1

probleme d'ordre alphabetique avec une pagination

Posté : 05 mai 2006, 09:31
par tinou
voila je desire faire une pagination pour la liste des mes equipes, ca c'est fait mais vu que j 'utilisé un code pour une pagination de news, mes equipe s'affiche dans l'odre inversement chronologique alors que je voudrais qu'elles s'affichent par ordre alphabetique j ai le code mais je comprend pas une certaine ligne. Pouvez vous m aider please :?
if(isset($_GET['page']))
            {
              $page = $_GET['page'];
            }
            else
            {
              $page = 1;
            }

            //instanciations des variables pour le systeme de pagination
                 $nbequipeparpage = 15;

                 $requete = "SELECT COUNT(*) AS nb FROM listing_equipe";
                 $resultat = mysql_query($requete);
                 $donnee = mysql_fetch_array($resultat);

                 $nb_equipe_total = $donnee['nb'];
                 $nb_pages = ceil($nb_equipe_total / $nbequipeparpage);
                 $premiereequipe = ($page - 1) * $nbequipeparpage;

            include'bdd.php';
            $requete="SELECT * FROM listing_equipe WHERE genre='$genre'ORDER BY academie LIMIT $premiereequipe, $nbequipeparpage";
je comprend pas trop la ligne :
$premiereequipe = ($page - 1) * $nbequipeparpage;
Merci d'avance pour votre aide!!

Posté : 05 mai 2006, 09:35
par guilt92
$premiereequipe = ($page - 1) * $nbequipeparpage; 
est utilisé pour savoir par quel équipe la page va commencer. Tu vois par la suite dans la requete le LIMIT qui lui dit d'afficher $premiereequipe comme premiere equipe.

Ainsi si tu es à la page 1 alors $page =1 ainsi $premiereequipe = 0 mais en revanche si tu es à la page 2 la première équipe sera l'équipe 5 si tu affiches 5 équipes par page...

Tout ca pour dire que cette ligne sert a savoir où commencer dans la base pour ne pas afficher plusieurs fois les memes équipes sur les différentes page. Ton problème ne vient pas de là.

Il vient probablement du ORDER BY dans la dernière requète, c'est ca qui détermine dans quel ordre seront sélectionnés les résultats. Si tu veux qu'elles s'affichent dans l'ordre alphabétique il faudrait par exemple mettre ORDER BY nom si il y a dans ta table un champ "nom"...

Posté : 05 mai 2006, 10:14
par tinou
justement j ai fait une order by academie, qui est en fait un nom d'academie, mais ma premiere page s'affiche bien par ordre mais des que je clic pour affiche ma deuxieme page, il me ré affiche ma toute preiere equipe.
Voila mon code au cas ou je suis pas tres clair.
<?php
     include'hautpage2.php';
?>

        <!--   Contenu de la page   -->

        <?php
          if(isset($_GET['genre']))
          {

            if(isset($_GET['page']))
            {
              $page = $_GET['page'];
            }
            else
            {
              $page = 1;
            }
            $genre=$_GET['genre'];
            //instanciations des variables pour le systeme de pagination
                 $nbequipeparpage = 15;

                 $requete = "SELECT COUNT(*) AS nb FROM listing_equipe";
                 $resultat = mysql_query($requete);
                 $donnee = mysql_fetch_array($resultat);

                 $nb_equipe_total = $donnee['nb'];
                 $nb_pages = ceil($nb_equipe_total / $nbequipeparpage);
                 $premiereequipe = ($page - 1) * $nbequipeparpage;

            include'bdd.php';
            $requete="SELECT * FROM listing_equipe WHERE genre='$genre'ORDER BY idequipe desc LIMIT $premiereequipe, $nbequipeparpage";
            $res=mysql_query($requete);
            echo'<center>';
                  if($genre=="F")
                    {echo'<b>Jeunes Filles</b><br/>';}
                  elseif($genre=="M")
                    {echo'<b>Jeunes Gens</b><br/>';}

                  echo'<table class="tablelisting" cellspacing="0" cellpadding="0" width="80%" bgcolor="white">
                   <tr>
                    <td class="tdlisting"><center><b>Nom</b></center></td>
                    <td class="td2listing"><center><b>AS</b></center></td>
                    <td class="td2listing"><center><b>Académie</b></center></td>
                   </tr>';

            while($vrai=mysql_fetch_assoc($res))
            {
               echo'<tr>
                     <td class="tdlisting"><center>'.$vrai['nomequipe'].'</center></td>
                     <td class="td2listing"><center>'.$vrai['ass'].'</center></td>
                     <td class="td2listing"><center>'.$vrai['academie'].'</center></td>
                     </tr>';
            }
            echo'</table>';
            echo '<br><center>Page n° ' . $page . '</center>';

            echo '<div style="text-align:center">';
            for($i=1; $i<=$nb_pages;$i++)
            {
                echo '[&nbsp;<a href="listing_equipe.php?page='.$i.'&genre='.$genre.'">'.$i.'</a>&nbsp;]&nbsp;';
            }
            echo "</div><br/>";
          }
          else
          {
               echo'<center>
               Faites votre choix puis cliquez sur "valider" pour voir s\'afficher les participants<br/><br/>
               <form action="listing_equipe.php" method="POST">
                     <select size="1" name="genre">
                         <option value="F">Jeunes Fille</option>
                         <option value="M">Jeunes Gens</option>
                     </select>
                     <input type="submit" value="Valider" name="valider">
               </form>
               </center><br/>';
          }
          ?>



       <?php


     if(isset($_POST['valider']))
     {
            $genre=$_POST['genre'];

            if(isset($_GET['page']))
            {
              $page = $_GET['page'];
            }
            else
            {
              $page = 1;
            }

            //instanciations des variables pour le systeme de pagination
                 $nbequipeparpage = 15;

                 $requete = "SELECT COUNT(*) AS nb FROM listing_equipe";
                 $resultat = mysql_query($requete);
                 $donnee = mysql_fetch_array($resultat);

                 $nb_equipe_total = $donnee['nb'];
                 $nb_pages = ceil($nb_equipe_total / $nbequipeparpage);
                 $premiereequipe = ($page - 1) * $nbequipeparpage;

            include'bdd.php';
            $requete="SELECT * FROM listing_equipe WHERE genre='$genre'ORDER BY academie LIMIT $premiereequipe, $nbequipeparpage";
            $res=mysql_query($requete);
            echo'<center>';
                  if($genre=="F")
                    {echo'<b>Jeunes Filles</b><br/>';}
                  elseif($genre=="M")
                    {echo'<b>Jeunes Gens</b><br/>';}

                  echo'<table class="tablelisting" cellspacing="0" cellpadding="0" width="80%" bgcolor="white">
                   <tr>
                    <td class="tdlisting"><center><b>Nom</b></center></td>
                    <td class="td2listing"><center><b>AS</b></center></td>
                    <td class="td2listing"><center><b>Académie</b></center></td>
                   </tr>';

            while($vrai=mysql_fetch_assoc($res))
            {
               echo'<tr>
                     <td class="tdlisting"><center>'.$vrai['nomequipe'].'</center></td>
                     <td class="td2listing"><center>'.$vrai['ass'].'</center></td>
                     <td class="td2listing"><center>'.$vrai['academie'].'</center></td>
                     </tr>';
            }
            echo'</table>';
            echo '<br><center>Page n° ' . $page . '</center>';

            echo '<div style="text-align:center">';
            for($i=1; $i<=$nb_pages;$i++)
            {
                echo '[&nbsp;<a href="listing_equipe.php?page='.$i.'&genre='.$genre.'">'.$i.'</a>&nbsp;]&nbsp;';
            }
            echo "</div><br/>";
     }
?>
      <!-- Fin Contenu de la page -->

<?php
    include'baspage2.php';
?>
Dsl pour la longueur

Posté : 05 mai 2006, 10:20
par Ryle
Le problème est que lorsque tu passe par le lien, tu envois les données de la page suivante en GET (via l'url). C'est donc la première partie de ton code qui est utilisée et il te reste un "'ORDER BY idequipe desc ..." dedans :)

Par contre le code pourrait être optimiser vu que les deux traitement sont quasiment identiques... C'est dommage de devoir le faire deux fois alors qu'en gérant mieux POST et les GET, tu pourrais n'avoir qu'une seule requête et qu'un seul affichage, ce qui est beaucoup plus pratique pour la maintenance et les évolutions :)

(et ça t'éviterais ce genre d'erreur ;))

Posté : 05 mai 2006, 10:26
par tinou
merci bcp pour ton aide.
En ce qui concerne les POST et les GET, j avous que je me suis pris la tete au départ en faisant ce que tu dit et je n y arrivai pas, jai donc choisit la méthode lourde mais sur :lol: .
Maintenant que j ai fait cela je vois plus du tout comment faire pour alleger.

Posté : 05 mai 2006, 10:51
par Ryle
Tu peux simplement récupérer la valeur de "genre" et de "page" dans POST ou GET dès le début et virer allégrement la moitié redondante de ton code :)
<?php 
// si genre est défini dans POST on l'utilise, sinon on regarde dans GET, et s'il n'est toujours pas défini on le met à vide
$genre = isSet($_POST['genre']) ? $_POST['genre'] : ( isSet($_GET['genre']) ? $_GET['genre'] : "" ); 
// idem pour page avec 1 comme valeur par défaut
$page = isSet($_POST['page']) ? $_POST['page'] : ( isSet($_GET['page']) ? $_GET['page'] : 1 ); 

if(!empty($genre)) { // si genre n'est pas vide 

	//instanciations des variables pour le systeme de pagination 
	$nbequipeparpage = 15; 
	
	$requete = "SELECT COUNT(*) AS nb FROM listing_equipe"; 
	$resultat = mysql_query($requete); 
	$donnee = mysql_fetch_array($resultat); 
	
	$nb_equipe_total = $donnee['nb']; 
	$nb_pages = ceil($nb_equipe_total / $nbequipeparpage); 
	$premiereequipe = ($page - 1) * $nbequipeparpage; 
	
	include'bdd.php'; 
	$requete="SELECT * FROM listing_equipe WHERE genre='$genre' ORDER BY academie LIMIT $premiereequipe, $nbequipeparpage"; 
	$res=mysql_query($requete); 
		
	echo'<center>'; 
	if($genre=="F") 
		{echo'<b>Jeunes Filles</b><br/>';} 
	elseif($genre=="M") 
		{echo'<b>Jeunes Gens</b><br/>';} 
	
	echo'<table class="tablelisting" cellspacing="0" cellpadding="0" width="80%" bgcolor="white"> 
		<tr> 
			<td class="tdlisting"><center><b>Nom</b></center></td> 
			<td class="td2listing"><center><b>AS</b></center></td> 
			<td class="td2listing"><center><b>Académie</b></center></td> 
		</tr>'; 
	
	while($vrai=mysql_fetch_assoc($res)) { 
		echo'<tr> 
				<td class="tdlisting"><center>'.$vrai['nomequipe'].'</center></td> 
				<td class="td2listing"><center>'.$vrai['ass'].'</center></td> 
				<td class="td2listing"><center>'.$vrai['academie'].'</center></td> 
			</tr>'; 
	} 
	echo'</table>'; 
	echo '<br><center>Page n° ' . $page . '</center>'; 
	
	echo '<div style="text-align:center">'; 
	for($i=1; $i<=$nb_pages;$i++) { 
		echo '[&nbsp;<a href="listing_equipe.php?page='.$i.'&genre='.$genre.'">'.$i.'</a>&nbsp;]&nbsp;'; 
	} 
	echo "</div><br/>"; 
	} 
else { 
	?>
	<center> 
	Faites votre choix puis cliquez sur "valider" pour voir s'afficher les participants<br/><br/> 
	<form action="listing_equipe.php" method="POST"> 
	      <select size="1" name="genre"> 
	          <option value="F">Jeunes Fille</option> 
	          <option value="M">Jeunes Gens</option> 
	      </select> 
	      <input type="submit" value="Valider" name="valider"> 
	</form> 
	</center><br/>
	<?
} 
?> 
A tester, mais à priori, ce devrait quand même être plus simple :)

Posté : 05 mai 2006, 15:57
par tinou
merci ca marche nikel j ai bien etudié ta page et je vois ce kil faut faire maintenant. Merci encore :D :D