Page 1 sur 1

Pagination

Posté : 11 juil. 2005, 11:13
par airbem
Bonjour

Je souhaite afficher le resultat d'une requete sur plusieurs page , voici donc mon programme.
<? 
// Cas d'une requête renvoyant des résultat que l'on 
// souhaite afficher en plusieurs pages
// Ici on affiche les résultats par 4


// on effectue la requête 
$db = mysql_connect('****', '***', '******');
mysql_select_db('base1',$db); 


if(isset($_GET['recherche'])) 
{ 
 if($_GET['recherche']=='') 
 { 
   echo"<h2>Recherche</h2>"; 
   echo"Veuillez saisir un critère de recherche"; 
 } 
 elseif(strlen($_GET['recherche'])<3) 
 { 
   echo"<h2>Recherche</h2>"; 
   echo"Veuillez saisir un critère de recherche de plus de 3 caractères"; 
 }

$recherche=$_GET['recherche']; 


$sqlquery=  "SELECT * FROM cv WHERE titre LIKE '%$recherche%' OR ref LIKE '%$recherche%' OR nom LIKE '%$recherche%' OR prenom LIKE '%$recherche%' OR secteur LIKE '%$recherche%' OR ville LIKE '%$recherche%'"; 
//$result = mysql_query($sqlquery);
$nombre_total_de_resultat = mysql_num_rows(mysql_query($sqlquery));
if($nombre_total_de_resultat <=0) 
   { 
     echo"<br>Aucun résultat trouvé dans la base de donnée<br><br>"; 
   } 

}


// on récupère le nombre de résultat que la requête renvoie

// on découpe ce nombre en X pages de 4 résultats


$nombre_de_page=ceil($nombre_total_de_resultat/4);

// pour savoir sur quelle page on se trouve on recherche
// la valeur de la variable $page.
// si elle est "égale à rien" alors on l'initialise à 1


$page=($_GET[page]) ? "$_GET[page]" : "1";

// on calcul la valeur du début de la clause SQL LIMIT
// d'après la page où l'on se trouve...

$debut=($page*4)-4;

// on concatène le tout à la requête de départ et on va ensuite
// travailler sur le résultat de CETTE requête.

$sqlquery2 =  mysql_query("SELECT * FROM cv WHERE titre LIKE '%$recherche%' OR ref LIKE '%$recherche%' OR nom LIKE '%$recherche%' OR prenom LIKE '%$recherche%' OR secteur LIKE '%$recherche%' OR ville LIKE '%$recherche%' LIMIT $debut,4");
$nombre=mysql_num_rows($sqlquery2);
// on veut afficher au maximum 9 pages sous la forme 
// " <<-1-2-3-4-5-6-7-8-9->> "
// on va donc faire une boucle que l'on va décaler
// à chaque fois de une page, à partir de la cinquième page
// et jusqu'à l'avant avant ...n page.

if($_GET[page]>5 && $_GET[page]<=($nombre_de_page-4)) {$decale=$_GET[page]-5;}
elseif($_GET[page]<5) {$decale=0;}
elseif($_GET[page]>($nombre_de_page-5)) {$decale=$nombre_de_page-9;}

// ensuite on veut afficher des "boutons" précedent et suivant

$plus=($page==$nombre_de_page) ? "" : "<a href='rechercher.php?page=".($page+1)."> suivant </a>";
$moins=($page==1) ? "" : "<a href='rechercher.php?page=".($page-1)."> précedent </a>";

// en fonction du nombre de page on distingue deux fin de boucle
// possible...

$fin_de_boucle=($nombre_de_page<10) ? "$nombre_de_page" : "".(9+$decale)."";

// on fait une boucle avec tout le bazar du haut...

for($i=1+$decale;$i<=$fin_de_boucle;$i++){

$menu.=($i==$page) ? " $i " : " <a href='rechercher.php?page=$i>$i</a> ";

}

// et c'est tout !
// il faudra bien entendu faire une boucle pour afficher
// le résultat de votre requête du genre :

for ($i=1;$i<=$nombre;$i++) {
$tablo = mysql_fetch_object($sqlquery2) ;         
print "<TR>";
print "<TD><BR></TD>";

print "</TR>";
           print "<TR  bgcolor=\"#E0ECF8\">";

print "<TD nowrap class=\"style2\" bgcolor=\"#E0ECF8\" ><b>Numero:&nbsp</b>$tablo->ref</TD>";
print "<TD>";
-----------------------------
----------------------------
--------------
------------------------
--------------

 }
mysql_close(); 
?>
</table>              </td>
         </tr>
       </table></td>
     </tr>
   </table></td>
 </tr>
</table>
<table width='85%' border='0' align="center" cellpadding='0' cellspacing='0'>
<tr> 
   <td align="center"><? echo "$moins $menu $plus";?></td>
    </tr>
</table>

Mais j'ai un petit souci :?
Le souci est au niveau des liens qui permettent d'accedé au page suivant ou precedantte.

Je m'explique lorsque je lance m'a recherche le resultat s'affiche dans une page en bas de la page j'ai :
1 suivant
Je clique sur suivant , donc j'arrive a la page suivant et en bas de cette j'ai :
suivant
Ce qui n'est pas nomal car je devrais avoir aussi le lien precedent.

Je clique sur ce lien" suivant " , je tombe sur la page suivante et en bas de cette page j'ai litteralement ceci ;
<a href='rechercher.php?page=2> suivant

Si quelqu'un peut m'aider , MERCI BIEN

Posté : 12 juil. 2005, 14:29
par ouckileou
c'est assez dur de se mettre dans un code assez long quand on l'a pas écrit sois-même

mais je vois déjà quelque chose qui pourrait créer ton problème de lien dont le code s'affiche
$menu.=($i==$page) ? " $i " : " <a href='rechercher.php?page=$i>$i</a> "; 
tu as mis une quote avant recherche.php mais elle n'est pas fermée

sinon pour débugger ce genre de fonctionnalité affiche de façon brute les variables transmises et regarde le code source généré

exemple pour afficher des variables $_GET
echo "<pre>";
print_r($_GET);
echo "</pre>";

Posté : 13 juil. 2005, 19:12
par shi
Tiens un systeme de pagination, il n'y aura pas les liens 1,2,3... Mais tu auras suivant/précédent normalement ! Esssaie pour voir !

tu crées le fichier mysql.inc.php suivant :
<?php
  $connection = mysql_connect( "localhost", "root", "" ) OR die( "impossible de se connecter.<br />\nErreur MySQL '" . mysql_error() . "'" );
  mysql_select_db( "base1", $connection ) OR die( "Impossible de s&eacute;lectionner la base sp&eacute;cifi&eacute;e.<br />\nErreur MySQL '" . mysql_error() . "'" );
?>
tu changes ton code pour celui là (presque pareil mais pas les liens 1,2,3)
<?Php
 include( "mysql.inc.php" );
 $page = isset($_GET['page']) ? $_GET['page'] : 0; 
?>
<body>
<form name="annuaire" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<input type="text"   name="critere"   value="Votre recherche ici.     <?php if(!$critere) echo stripslashes( $critere ); ?>" size="17" onFocus='document.forms["annuaire"].elements["critere"].value =""'/>
<input type="submit" name="envoyer" value="Envoyer"/><input type="hidden" name="recherche" value="1"/></form>
<?Php
$na = 4; 
$recherche = isset($_POST["recherche"]) ? $_POST["recherche"] : 1; 
$critere   = (isset($_POST["critere"]) && !isset($_GET['crit'])) ? $_POST["critere"] : null; 
if($critere == null) 
{ 
    $critere   = isset($_GET["crit"]) ? $_GET["crit"] : null; 
} 
$nb_limite = strlen($critere);
if($nb_limite <=3 && $recherche == 1 && $critere != null) 
{ 
   echo"<h2>Recherche</h2>"; 
   echo"Veuillez saisir un critère de recherche de plus de 3 caractères"; 
} 
  if($recherche == 1 && $critere != null && $nb_limite>3) 
{ 
    $requete    = "SELECT * FROM cv WHERE titre LIKE '%$recherche%' OR ref LIKE '%$recherche%' OR nom LIKE '%$recherche%' OR prenom LIKE '%$recherche%' OR secteur LIKE '%$recherche%' OR ville LIKE '%$recherche%'"; 
    $execution  = mysql_query( $requete, $connection ) OR die( "Impossible d'executer la Requete !" );
    $total = @mysql_num_rows( $execution ) ;
    if( $total> 0 )
    {
	 $nb_pages = ceil($total/$na); 
     $depart = $page * $na;
	 $requete2    = "SELECT * FROM cv WHERE titre LIKE '%$recherche%' OR ref LIKE '%$recherche%' OR nom LIKE '%$recherche%' OR prenom LIKE '%$recherche%' OR secteur LIKE '%$recherche%' OR ville LIKE '%$recherche%' limit ".$depart.",".$na;
    $execution2  = mysql_query( $requete2, $connection ) OR die( "Impossible d'executer la Requete !" );
    $totallimite = @mysql_num_rows( $execution2 ) ;
?>
<br />
R&eacute;sultat : <?php echo $total; ?><br />
Mot recherch&eacute; : <?php echo $critere; ?></p>
<br />
<?php
      while( $un_mot = mysql_fetch_array( $execution2 )) 
      {
?><?php echo $un_mot<?php
      }
      mysql_free_result( $execution2 );
    }
      else  
	echo "Aucune traduction disponible pour le moment.";
    }
	if(isset($nb_pages) && $nb_pages > 0 && $page > 0 ) 
    { 
?> 
<form action="<?php echo($_SERVER['PHP_SELF']."?page=". ($page - 1))?>&crit=<?php echo($critere); ?>" method="post">
<input type="submit" value="Précédent"></form>
<?php 
    } 
    if(isset($nb_pages) && $page < ($nb_pages-1) && $total > $na) 
    { 
?> 
<form action="<?php echo($_SERVER['PHP_SELF']."?page=". ($page + 1))?>&crit=<?php echo($critere); ?>" method="post">
<input type="submit" value=" Suivant  "></form>
<?php 
 } 
?>
</body>
</html>
<?Php
  mysql_close();
?>