pagination renvoi toujours la meme resulta

Petit nouveau ! | 1 Messages

07 juil. 2011, 11:39

bonjours,, je suis debutant en programmation php et je suis entrain de réaliser mon premier projet php,mais je me suis bloqué dans un petit probleme .
Mon probleme est j'ai un formulaire de 200 enrigistrement et je voufrais l'afficher page par page (50 enrigistrement par page),,j'ai fait le code,,il s'affiche en haut de la page '1234123412341234...) qui se comporte comme des lien mais lorsque je clique je reste dans la meme page,,je sais que l'origine de mon probleme est "$_SERVER['PHP_SELF']" mais je ne sais qu'est ce que je peut faire....????
voici la parie de code correspondante. et merci beaucoup pour votre comprehension...
<?php
	     $limit=50;
         $page = isset($_GET['page']) ? $_GET['page'] : 0; 
		 $requete = "SELECT * from pc"; 
		 $ret = mysql_query($requete);
		 $nb_total=mysql_num_rows($ret);
		 if($nb_total>$page*$limit)
		 {
          $debut=$page*$limit; 
        
	   
         $limite=mysql_query("$requete limit $debut,$limit"); 
	      $limit_str = "LIMIT ". $page * $limit .",$limit"; 
	 
        $result = mysql_query("SELECT *  FROM pc ORDER BY id ASC $limit_str"); 
	     $k=1;
	    while ($row =mysql_fetch_array ($result) ) 
    {    
	     echo "<tr>";
		 echo "<td valign=top><p class=text2>$k</td>";
	     echo "<td valign=top><p class=text2>$row[1]</td>";
		 echo "<td valign=top><p class=text2>$row[2]</td>";
		 echo "<td valign=top><p class=text2>$row[11]</td>";
		 echo "<td valign=top><p class=text2>$row[12]</td>";
		 echo "<td valign=top><p class=text2>$row[9]</td>";
		 echo "<td valign=top><p class=text2>$row[7]</td>";
		 echo "<td valign=top><p class=text2>$row[8]</td>";
		 echo "<td><p class=text2><img src=img/arrow1.gif border=0> Nom :$row[3]<br>
		 <img src=img/arrow1.gif border=0> Pr&eacute;nom :$row[4]<br> 
		 <img src=img/arrow1.gif border=0> matricule :$row[5] <br> 
		 <img src=img/arrow1.gif border=0> Service/UF :$row[6]<br>
		 <img src=img/arrow1.gif border=0> Date d'affectation :$row[10]
		 </td>";
		 //if ($page>0) { 
         //$precedent=$page-1; 
         //echo "<a href="$PHP_SELF?$page=$precedent"><b>< Page précédente</b></a> "; 
         //} 
		 if ($page>0) { 
        $precedent=$page-1; 
        echo '<a href="'. $_SERVER['PHP_SELF'] .'?'.$page.'='.$precedent.'"><b>< Page précédente</b></a>'; 
        } 
         $i=0; 
         $j=1; 
		 if($nb_total>$limit) { 
         while($i<($nb_total/$limit)) { 
        if($i!=$page){
		echo ' <a href="' . $_SERVER['PHP_SELF'].'?'.$page.'='.$i.'"><b>'.$j.'</b></a> ';} 
        else { echo  '<b>'.$j.'</b>';} 
        $i++;$j++; 
      } 
      } 

      if($debut+$limit<$nb_total) { 
     $suivant=$page+1; 
     echo '<a href="' .$_SERVER['PHP_SELF'].'?'. $page.'='.$suivant.'"><b><Page suivante</b></a>';
    echo"</center>"; 
    }
    ?>


Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 juil. 2011, 12:41

Vérifies l'url qui est générée par php :)

A première vue, au lieu de passer l'argument "?page=1" dans ton lien, tu dois générer un "?0=1" et pour le coup, ça va fonctionner beaucoup moins bien :)

Ce n'est pas la variable $page qu'il te faut utiliser dans ton url, mais simplement la chaine "page" ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

khmaies
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 16:51

bonjours , merci beaucoup,,

comme ça ça marche bien,,,,maisil n'apparait pas le lien suivant,,juste il apparait le lien "précédent" avec une suite de 12341234 ....qui se comportent comme des lien,,,donc ,je voudrai avoir le lein "suivant" et lien précédent et eviter les liens 1234123412341234...
car en faite , je ne vous comprend pas lorsque vous disez..on doit generer "?0=1" au lieu "?page=1,,,
dans l'attente.... =D>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 juil. 2011, 18:12

Ma remarque était liée à ton erreur dans l'url :
echo ' <a href="' . $_SERVER['PHP_SELF'].'?'.$page.'='.$i.'"><b>'.$j.'</b></a>';
au lieu de
echo ' <a href="' . $_SERVER['PHP_SELF'].'?page='.$i.'"><b>'.$j.'</b></a>'; 

Dans le premier cas php va remplacer $page par sa valeur, donc si $page vaut 0, tu vas avoir "?0=1" dans l'url, alors que ce que tu veux c'est "?page=1"

Le problème est le même pour les liens vers tes pages suivantes et précédentes :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

khmaies
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 18:34

je pense que vous ne me comprenez pas bien.. :non:
j'ai changé comme vous avez proposé, mais le mon probleme est l'apparition des suite " 123412341234123412341234......" et la nom apparation des liens "suivant" ,,,,,,de plus dans le tabeau ,,,,à chaque passage d'un page à un autre , ,il y a réinialisation des" id" des formulaire ($k)...cad si à la page 1 , je m 'arrete à l'id 50,,dans la deuxieme page , je dois commencer par 51 ,,et pas "1"
et merci bien pour votre comprehension... =D>

Dans l'attente..++++++ :priere:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 juil. 2011, 21:51

Oki, alors pour la multiplication des suite, c'est parce que ta pagination est située dans ta boucle while, du coup elle apparait pour chaque enregistrement. Sort la de ta boucle, ça fonctionnera mieux :)

Pour la réinitialisation sur chaque page, c'est à mon avis du au fait que l'attribut "page" n'est pas correctement passé dans l'url. Quand tu cliques sur le 1, le lien que tu devrais avoir doit être "?page=0"... est ce que c'est bien le cas ?

Peux-tu nous montrer ton code à jour ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

khmaies
Invité n'ayant pas de compte PHPfrance

07 juil. 2011, 23:32

merci beaucoup, ,,

pour la deuxieme reamarque,,puis lorsque je clique sur le lien "1" ,il apparait dans l'addresse,,,?page=0
mais vraiment pour le reste je ne comprend pas qu'est ce que je doit faire correctement
SVP ,pouvez vous aider moi un peu plus,,, :priere:
voici mon code
$limit=50;
         $page = isset($_GET['page']) ? $_GET['page'] : 0; 
		 $requete = "SELECT * from pc"; 
		 $ret = mysql_query($requete);
		 $nb_total=mysql_num_rows($ret);
		 if($nb_total>$page*$limit)
		 {
          $debut=$page*$limit; 
        
	   
         $limite=mysql_query("$requete limit $debut,$limit"); 
	      $limit_str = "LIMIT ". $page * $limit .",$limit"; 
	 
        $result = mysql_query("SELECT *  FROM pc ORDER BY id ASC $limit_str"); 
	     $k=1;
	    while ($row =mysql_fetch_array ($result) ) 
    {    
	     echo "<tr>";
		 echo "<td valign=top><p class=text2>$k</td>";
	     echo "<td valign=top><p class=text2>$row[1]</td>";
		 echo "<td valign=top><p class=text2>$row[2]</td>";
		 echo "<td valign=top><p class=text2>$row[11]</td>";
		 echo "<td valign=top><p class=text2>$row[12]</td>";
		 echo "<td valign=top><p class=text2>$row[9]</td>";
		 echo "<td valign=top><p class=text2>$row[7]</td>";
		 echo "<td valign=top><p class=text2>$row[8]</td>";
		 echo "<td><p class=text2><img src=img/arrow1.gif border=0> Nom :$row[3]<br>
		 <img src=img/arrow1.gif border=0> Pr&eacute;nom :$row[4]<br> 
		 <img src=img/arrow1.gif border=0> matricule :$row[5] <br> 
		 <img src=img/arrow1.gif border=0> Service/UF :$row[6]<br>
		 <img src=img/arrow1.gif border=0> Date d'affectation :$row[10]
		 </td>";
		 $k++;
		 //if ($page>0) { 
         //$precedent=$page-1; 
         //echo "<a href="$PHP_SELF?$page=$precedent"><b>< Page précédente</b></a> "; 
         //} 
		 if ($page>0) { 
        $precedent=$page-1; 
        echo '<a href="'. $_SERVER['PHP_SELF'] .'?page='.$precedent.'"><b>< Page précédente</b></a>'; 
        } 
         $i=0; 
         $j=1; 
		 if($nb_total>$limit) { 
         while($i<($nb_total/$limit)) { 
        if($i!=$page){
		echo ' <a href="' . $_SERVER['PHP_SELF'].'?page='.$i.'"><b>'.$j.'</b></a> ';} 
        else { echo  '<b>'.$j.'</b>';} 
        $i++;$j++; 
      } 
	  }

      if($debut+$limit<$nb_total) { 
     $suivant=$page+1; 
     echo '<a href="' .$_SERVER['PHP_SELF'].'?page='.$suivant.'"><b><Page suivante</b></a>';
    echo"</center>"; 
    }
    ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 juil. 2011, 09:42

Pour le lien "suivant" qui n'apparait pas, c'est en fait à cause du "<" que tu as placé juste avant. Le navigateur considère du coup qu'il s'agit d'une balise html qu'il ne connait pas et donc n'affiche pas :) En ajoutant un espace comme tu l'as fait pour le lien précédent ça fonctionnera mieux (bien qu'en théorie le suivant soit plutôt dans l'autre sens : ">" ;))

Cependant, pour être sur que le navigateur n’interprète pas mal les crochets que tu veux afficher à l'écran (par rapport à ceux qui te servent pour le html), je te recommande de transformer ceux-ci en entités html : "<" devient alors ">" et ">" devient "<". C'est moins lisible, mais au moins, aucun risque que le navigateur ne les confonde avec des balises html :)



Quant à la pagination, pour éviter qu'elle ne se répète, il faut sortir tout le bloc qui affiche les pages de ta boucle while. En gros, ce pavé là doit être placé après l'accolade qui ferme ton while :
	if ($page>0) {
		$precedent=$page-1;
		echo '<a href="' . $_SERVER['PHP_SELF'] . '?page=' . $precedent . '"><b>< Page précédente</b></a>';
	}
	$i=0;
	$j=1;
	if ($nb_total>$limit) {
		while ($i<($nb_total/$limit)) {
			if ($i!=$page){
				echo ' <a href="' . $_SERVER['PHP_SELF'] . '?page=' . $i . '"><b>' . $j . '</b></a> ';
			}
			else { 
				echo  '<b>' . $j . '</b>';
			}
			$i++;
			$j++;
		}
	}

	if ($debut+$limit<$nb_total) {
		$suivant=$page+1;
		echo '<a href="' . $_SERVER['PHP_SELF'] . '?page=' . $suivant . '"><b>Page suivante ></b></a>';
	}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

khmaies
Invité n'ayant pas de compte PHPfrance

08 juil. 2011, 10:04

bonjours,,
merci beaucoup,,,,ça marche bien comme ça
mais vraiment pour la répétition , je ne savais pas comment se sortir de la boucle WHILE..?????? :^o
et merci d'avance pour votre comprehension.. :priere:
dans l'attente...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 juil. 2011, 10:17

Ben...
Début de ta boucle While {

  ...

  bloc pagination   // prendre ce bloc ->
                                        |
} // Fin de ta boucle while             |
                                        |
et le déplacer ici <--------------------v
;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

khmaies
Invité n'ayant pas de compte PHPfrance

08 juil. 2011, 10:30

merciiiiiiiiiiiiiiiiiiiiiiiiiiiiii,,, =D>