Bonjour,
depuis quelques jours je bataille pour paginer les résultats issus d'une BDD mysql. Mon site est en PHP et traite des fonds de commerce à vendre dans le sud-ouest. J'ai créé deux formulaires qui traitent, l'un une recherche par "mots clés", l'autre par 2 listes déroulantes (code_commerce, département).
Avec le formulaire "mots clés" la pagination marche très bien avec les variables de session.
Avec le formulaire "critères multiples" je bloque à la page 2 (vide) et je n'ai pas découvert de solution dans les différents forum. A première vue mes deux valeurs ne sont pas sauvegardées. Je ne dois pas savoir paramétrer et déclarer $_SESSION['$code_commerce'] et $_SESSION['$departement'].
Un petit coup de main me srait très utile ....
MERCI
Un aperçu de mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php
include('../inc_connect.php');
 
if(isset($_REQUEST['recherche']))
{
  $_SESSION['$recherche'] = $_REQUEST['recherche'] ;
  if ( isset( $_SESSION['$recherche'] ) )
   echo $_SESSION['$recherche'] ;
}
 
$limit  = 5;
$offset = ((isset($_REQUEST['offset']) && $_REQUEST['offset'] > 0) ? $_REQUEST['offset'] : 0);
 
                // on récupère les critères sélectionnés
                 extract ($_REQUEST);
 
                $i = 0;
 
                // si la variable est présente, on lui affecte une place dans le tableau 'choix[]', qui nous servira ensuite à construire le WHERE de la requête.
                 if(!empty($code_commerce)) { $choix[$i++] = "code_commerce = '$code_commerce'"; }
                 if(!empty($departement)) { $choix[$i++] = "departement = '$departement'"; }
                 if(!empty($ref)) { $choix[$i++] = "ref = '$ref'"; }
 
                    // on insère les éléments remplis dans une variable $critere, en commençant par la première occurrence, puis on boucle
 
                 $critere = @$choix[0]." ";
                for($j=1;$j<$i;$j++) 
                {
				$critere .= " AND ".$choix[$j]." ";
                 }
 
 
                // enfin on fait la requête si $i >0, ça veut dire qu'il y a des critères
                 if($i > 0) 
                {
                         // requete de selection
                         $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM tous_commerces2 WHERE $critere ORDER BY ref desc";
                         $sql .= ' LIMIT '.$offset.', '.$limit.'';
                         $requete = @mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
                 }
 
                     $i = @mysql_num_rows($requete); //comptage du nombre d'entrées sélectionnées par la recherche
 
    if ($i == 0) //s'il n'y a pas de résultat
    {
        echo '<font color="#FF0000">Pas de résultat ....</font><br><font color="#808080">1 - Faites votre choix dans le type de commerce<br>2 - choisissez un département limitrophe<br>3 - cette référence peut ne plus exister (commerce vendu)</font>';
    }
     else 
 
 
                {
                echo 'Nombre de résultats: ' . $i . '<br /><br />'; //nombre de résultats
 
                         $sql = "SELECT * FROM tous_commerces2 ORDER BY ref desc";
                 }
    while ($donnees = @mysql_fetch_assoc( $requete ) )
  {  
 
    ?>
 
        <tr>
<fieldset class="arrondi" style="border:2px solid #CCCCCC; font-family:verdana; color:#000000; background-color:#FFFFFF; margin-bottom: 5px">
<div style="float:left; width:200px; margin-top: 3px">&nbsp;<font color="#808080" size="2" face="arial">Ref:</font>&nbsp;<font color="#0000FF" face="arial" size="2"><?php echo $donnees['ref']; ?></font></div> 
<div style="float:right; width:250px; margin-top: 5px">
<font color="#808080" size="2" face="arial">Prix des murs:</font>&nbsp;<font color="FF0000" face="arial" size="2"><strong><?php echo $donnees['prix_murs']; ?>&nbsp;€</strong></font></div> 
<div style="margin:auto; margin-top: 5px">
<font color="#808080" size="2" face="arial">Prix du Fonds de C</font><font color="#808080" size="3" face="arial">:</font>&nbsp;<font color="FF0000" size="2"><strong><?php echo $donnees['prix']; ?>&nbsp;€</strong></font></div>
<div align="left" style="margin-bottom: 5px; margin-top: 5px">&nbsp;<font color="808080" size="3" face="arial"><strong><?php echo $donnees['commerce']; ?></strong></font></div>
<div align="left" style="margin-bottom: 5px">&nbsp;<font color="#808080" size="2">Descriptif:</font>&nbsp;<font color="#808080" size="2" face="arial"><?php echo $donnees['descriptif']; ?></font></div>
<div style="float:left; margin-bottom: 0"><a href="#" class="bulle"><img border="0" src="../images/google-map.jpg" width="90" height="21"><span><img style="border:2px solid #FFFFFF"; src="../cartographie/<?php echo $donnees['google-map']; ?>" width="500" height="400"></span></a></div>
<div style="float:right; margin-bottom: 0"><a href="../Dossier_pages/selection.php?recherche=<?php echo $donnees['ref']; ?>"><img border="0" src="../images/button2.jpg" width="100" height="35"></a></div>
<div style="margin:auto" align="center"><img src="../images/<?php echo $donnees['news_vendu']; ?>" width="55" height="35"></div>
 
</fieldset>
</tr>
 
 
<?php 
}
 
// récupère le nombre total d'enregistrements dans la table
$requete = mysql_query('SELECT FOUND_ROWS() AS total');
// $donnees['total'] contient le nombre total d'enregistrements dans la table
$donnees = mysql_fetch_assoc($requete);
 
// appel de la fonction d'affichage de la pagination
echo paging('../Dossier_pages/recherche2.php', $donnees['total'], $limit, $offset);
 
/**
 * Affiche la pagination
 *
 * @param string $page
 * @param integer $total_rows
 * @param integer $limit
 * @param integer $offset
 * @param array $preserved_params, permet de spécifier des paramètres supplémentaires
 * à transmettre entre les pages array('param1'=>'valeur', 'param2'=>'valeur', [...])
 * @return string
 */
function paging($page, $total_rows, $limit, $offset, $preserved_params = null){
 
  $query = '';
  $str_hidden = '';
 
  if (is_array($preserved_params)) {
    foreach ($preserved_params as $k=>$v) {
      if ($k != 'offset') {
        $query .= $k.'='.urlencode($v).'&amp;';
 
        $str_hidden .= '<input type="hidden" name="'.$k.'" value="'.htmlentities($v).'" />';
      }
    }
  }
 
  if (strpos($page, '?') !== false) {
    $page = substr($page, 0, strpos($page, '?'));
  }
 
  $nb_pages = ceil($total_rows / $limit);
  $i = 0;
  $j = 0;
  $idx_page = 0;
  while ($i < $total_rows) {
    $tab_pages[$j]['id']  = $i;
    $tab_pages[$j]['text']  = ($j + 1).' / '.$nb_pages;
    if ((int)$offset >= $i) {
      $idx_page = $j;
    }
    $i += $limit;
    $j++;
  }
 
  $reponse = ' <p><form class="barre-navigation-pages" action="'.$page.'">';
  $page .= '?'.$query;        
 
  if ($offset > 0) 
 {$reponse .= '<a class="prevnext" href="'.$page.'&amp;offset='.($offset - $limit).'" titre="lien-precedant">Précédant</a>&nbsp;&nbsp;&nbsp;&nbsp; ';}   
 
  $reponse .= 'Page <select name="offset">';
  for ($i = 0; $i < $nb_pages; $i++) {
    $reponse .= '<option value="'.$tab_pages[$i]['id'].'" ';
    if ($i == $idx_page) {
      $reponse .= 'selected="selected"';
    }
    $reponse .= '>'.$tab_pages[$i]['text'].'</option>';
  }
  $reponse .= '</select>'.$str_hidden.'';
 
  if ($offset < ($total_rows - 1) && isset($tab_pages[$idx_page + 1])) {
    $reponse .= '&nbsp;&nbsp;&nbsp;&nbsp;<a class="prevnext" href="'.$page.'offset='.$tab_pages[$idx_page + 1]['id'].'" titre="lien-suivant">Suivant</a>';
  }
  $reponse .= '</form></p>';
  return $reponse;
}
 
 
?>