probleme d'ordre alphabetique avec une pagination

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme d'ordre alphabetique avec une pagination

par tinou » 05 mai 2006, 15:57

merci ca marche nikel j ai bien etudié ta page et je vois ce kil faut faire maintenant. Merci encore :D :D

par Ryle » 05 mai 2006, 10:51

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 :)

par tinou » 05 mai 2006, 10:26

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.

par Ryle » 05 mai 2006, 10:20

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 ;))

par tinou » 05 mai 2006, 10:14

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

par guilt92 » 05 mai 2006, 09:35

$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"...

probleme d'ordre alphabetique avec une pagination

par tinou » 05 mai 2006, 09:31

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!!