Probleme de pagination

Nouveau WRInaute
Bonjour,

y'aurait il un programmeur php expérimenté qui pourrait m'aider svp? car ca fait une semaine que je cherche sans trouver.
J'ai un formulaire de plusieurs choix qui redirige vers la page de résultat.
je me connecte à la BDD, je calcule le nombre total de réponses, je filtre avec mes requêtes qui vont bien et ensuite j'affiche.
Jusque là tout va bien mais quand je clique sur la page suivant, il n'y a plus aucun résultat qui s'affiche. Alors je crois s'avoir qu'il faut utiliser $_cookies ou $_session pour pouvoir enregistrer le choix de l'internaute et le transmettre de page en page mais je galère grave! je ne sais pas écrire le code convenablement. Merci d'avance pour votre aide.

Code:
$agemin = isset($_POST['agemin']) ? $_POST['agemin'] : ( !empty($_GET['agemin']) ? $_GET['agemin'] : '') ;  // récupération des données du champs de recherche
$agemax = isset($_POST['agemax']) ? $_POST['agemax'] : ( !empty($_GET['agemax']) ? $_GET['agemax'] : '') ;  // récupération des données du champs de recherche
$taimin = isset($_POST['taimin']) ? $_POST['taimin'] : ( !empty($_GET['taimin']) ? $_GET['taimin'] : '') ;  // récupération des données du champs de recherche
$taimax = isset($_POST['taimax']) ? $_POST['taimax'] : ( !empty($_GET['taimax']) ? $_GET['taimax'] : '') ;  // récupération des données du champs de recherche
$poimin = isset($_POST['poimin']) ? $_POST['poimin'] : ( !empty($_GET['poimin']) ? $_GET['poimin'] : '') ;  // récupération des données du champs de recherche
$poimax = isset($_POST['poimax']) ? $_POST['poimax'] : ( !empty($_GET['poimax']) ? $_GET['poimax'] : '') ;  // récupération des données du champs de recherche
$enfant = isset($_POST['enfant']) ? $_POST['enfant'] : ( !empty($_GET['enfant']) ? $_GET['enfant'] : '') ;  // récupération des données du champs de recherche
$statut = isset($_POST['statut']) ? $_POST['statut'] : ( !empty($_GET['statut']) ? $_GET['statut'] : '') ;  // récupération des données du champs de recherche
$cheveux = isset($_POST['cheveux']) ? $_POST['cheveux'] : ( !empty($_GET['cheveux']) ? $_GET['cheveux'] : '') ;  // récupération des données du champs de recherche
$yeux = isset($_POST['yeux']) ? $_POST['yeux'] : ( !empty($_GET['yeux']) ? $_GET['yeux'] : '') ;  // récupération des données du champs de recherche
$ville = isset($_POST['ville']) ? $_POST['ville'] : ( !empty($_GET['ville']) ? $_GET['ville'] : '') ;  // récupération des données du champs de recherche


?>

<?php
$perPage = 12; // resultats max par page

$req = $db->query("SELECT COUNT(*) AS total  FROM profils WHERE enfant = '$enfant' AND age BETWEEN (curdate() - interval '$agemax' year) AND (curdate() - interval '$agemin' year) AND taille BETWEEN '$taimin' AND '$taimax' AND poids BETWEEN '$poimin' AND '$poimax' AND statut = '$statut' AND cheveux = '$cheveux' AND yeux = '$yeux' AND ville = '$ville'");
$result = $req->fetch();
$total = $result['total'];?>

<div id="box-right-catalogue"> 

<?php $nbPage = ceil($total/$perPage);

if(isset($_GET['page']) && !empty($_GET['page']) && ctype_digit($_GET['page']) == 1){
    if ($_GET['page'] > $nbPage) {
      $page = $nbPage;
    }else{
      $page = $_GET['page'];
    }

}else{

  $page = 1;
}

$first = ($page-1)*$perPage;


$reponse = $db->query("SELECT * FROM profils WHERE enfant = '$enfant' AND age BETWEEN (curdate() - interval '$agemax' year) AND (curdate() - interval '$agemin' year) AND taille BETWEEN '$taimin' AND '$taimax' AND poids BETWEEN '$poimin' AND '$poimax' AND statut = '$statut' AND cheveux = '$cheveux' AND yeux = '$yeux' AND ville = '$ville' ORDER BY age DESC LIMIT $first, $perPage" );
while ($donnees = $reponse->fetch())
{
?>

  <div class="box-cadre-catalogue">
<img src="profils/<?php echo $donnees['photo']; ?>" class="photo1-catalogue" width="219" height="330">
<?php echo "<a href='".$donnees['lien']."'>"; ?> <img src="images/1cadre.png"class="cadre1-catalogue"></a>
<p class="prenom-catalogue"><?php echo $donnees['prenom']; ?> 
                            <?php  echo ageCalculator($donnees['age']);?> ans</p>
                                

</div>

<?php }  ?>  

<!-- *********** NUMÉROS DE PAGES ************* NUMÉROS DE PAGES ************* NUMÉROS DE PAGES **************-->

<div class="numeros-pages">
<ul id="pagination">

<?php

if ($page > 1):
    ?><li><a href="?page=<?php echo $page - 1; ?>">Précédent</a></li> <?php
endif;

for ($i = 1; $i <= $nbPage; $i++):
      if($i == $page){
    ?><li class="active"><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li> 
    <?php
  }

  else{
    ?>
        <li><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li><?php  }

endfor;
if ($page < $nbPage):
    ?> <li><a href="?page=<?php echo $page + 1 ;?>">Suivant</a></li><?php
endif;
?>
</ul>
</div>
</div>
 
WRInaute accro
Il faut faire un Post-Redirect-Get: https://fr.wikipedia.org/wiki/Post-Redirect-Get

- Post: un form en method="post" (comme tu as actuellement).
- Redirect: ensuite tu construis une URL avec les mêmes paramètres pour faire une redirection.
- Get: liste des résultats, avec pagination &page=xxx

Tu peux utiliser directement $_REQUEST qui lit le $_GET et $_POST.

Edit: ben en fait c'est déjà ce que tu fais, donc tu dois juste construire les liens href="?page=xxx" avec tous les paramètres $_GET (http_build_query())
 
Nouveau WRInaute
Merci pour ta réponse,

Alors dans mon lien qui est actuellement comme ceci :
Code:
<li><a href="?page=<?php echo $page + 1 ;?>">Suivant</a></li>

je dois écrire ceci:
Code:
<li><a href="<?php $_GET['agemin']['agemax']['taimin']['taimax'](ect...)?>?page=<?php echo $page + 1 ;?>">Suivant</a></li>

C'est bien ça?
 
WRInaute accro
Plutôt du genre:
PHP:
<span class="syntaxhtml"><span class="syntaxdefault"><?php<br />$page </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $page </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$query </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'?'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> http_build_query</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">compact</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'agemin'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'agemax'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'taimin'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'taimax'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'poimin'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'poimax'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'enfant'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'statut'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'cheveux'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'yeux'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'ville'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'page'</span><span class="syntaxkeyword">),</span><span class="syntaxdefault"> </span><span class="syntaxstring">''</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'&amp;'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">?><br /></span><a href="<span class="syntaxdefault"><?php echo $query</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> ?></span>">Suivant</a></span>
 
Nouveau WRInaute
Merci infiniment, ça marche, j'étais bloqué depuis une semaine.
ça fait plaisir de se faire aider par des gens vraiment compétent.

Merci 1000 fois!
 
Nouveau WRInaute
Salut Spout,

Pourrais tu me donner un dernier coup de pouce svp?

J'ai adapté le code pour toute la pagination mais il semblerait qu'il y ait un conflit entre les $page. ($page = page - 1 , $page = $i et $page = + 1) je les ai donc nommé différemment pour contourner le problème mais cela ne marche pas. D'où vient le problème?
Merci

Code:
<div class="numeros-pages">
<ul id="pagination">


<?php

if ($page > 1):
    ?><li><?php
$page = $page - 1;
$query = '?' . http_build_query(compact('agemin', 'agemax', 'taimin', 'taimax', 'poimin', 'poimax', 'enfant', 'statut', 'cheveux', 'yeux', 'ville', 'page'), '', '&amp;');
?>
<a href="<?php echo $query; ?>">Precedent</a></li> <?php
endif;



for ($i = 1; $i <= $nbPage; $i++):
      if($i == $page){
    ?><li class="active"><a><?php echo $i; ?></a></li> 
    <?php
  }

  else{
    ?>
        <li><?php
$page = $i;
$query = '?' . http_build_query(compact('agemin', 'agemax', 'taimin', 'taimax', 'poimin', 'poimax', 'enfant', 'statut', 'cheveux', 'yeux', 'ville', 'pagemid'), '', '&amp;');
?>
<a href="<?php echo $query; ?>"><?php echo $i; ?></a></li><?php  }



endfor;
if ($page < $nbPage):
    ?> <li><?php
$page = $page + 1;
$query = '?' . http_build_query(compact('agemin', 'agemax', 'taimin', 'taimax', 'poimin', 'poimax', 'enfant', 'statut', 'cheveux', 'yeux', 'ville', 'page'), '', '&amp;');
?>
<a href="<?php echo $query; ?>">Suivant</a></li><?php
endif;
?>
</ul>
</div>
 
WRInaute accro
Alors si t'as un conflit tu dois faire dans ta boucle:
PHP:
<span class="syntaxdefault">for </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$i </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> $i </span><span class="syntaxkeyword"><=</span><span class="syntaxdefault"> $nbPage</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> $i</span><span class="syntaxkeyword">++):<br /></span><span class="syntaxdefault">    $query </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'?'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> http_build_query</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">array_merge</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">compact</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'agemin'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'agemax'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'taimin'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'taimax'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'poimin'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'poimax'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'enfant'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'statut'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'cheveux'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'yeux'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'ville'</span><span class="syntaxkeyword">),</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">'page'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $i</span><span class="syntaxkeyword">]),</span><span class="syntaxdefault"> </span><span class="syntaxstring">''</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'&amp;'</span><span class="syntaxkeyword">);<br />endfor;</span><span class="syntaxdefault"></span>
Regarde la doc de compact: http://php.net/manual/en/function.compact.php
Vu que c'est $_GET['page'], tu dois avoir une clef "page" passée à http_build_query() pour générer le "&amp;page=xxx" à la fin.
 
Discussions similaires
Haut