Affichage d'une requête sur plusieurs pages

greg62300 Messages postés 3 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 4 février 2005 - 2 févr. 2005 à 21:47
greg62300 Messages postés 3 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 4 février 2005 - 4 févr. 2005 à 12:36
Salut,


Voici ce que je souhaite faire :


J'ai un formulaire composé de 3 listes déroulante :


Le but étant de faire grâce à ce formulaire une requete permettant d'avoir la liste des hommes ou des femmes avec éventuellement une recherche plus précise en y incluant un âge minimum et un âge maximum.


Je souhaite que le résultat de cette requête soit répartie sur plusieurs page dans le cas où il y a plus de 10 personnes trouvées.



Mon problème est le suivant :


Avec le code ci-dessous ma requête s'effectue correctement, le numéro des pages s'affiche aussi correctement, mais quand je clique pour passer à la page suivante eh bien là plus rien ne va. Je me retrouve donc avec le message "aucun membres correspond aux critères de recherche".


Le problème est causé par la variable dans le WHERE de la requête (voir après le code).


Voici le formulaire sur la page recherche.php :


<form method= "post" action="resultat_recherche.php">


<select name="sexe">
<option value='' selected></option>
<option value=1>Femme</option>
<option value=2>Homme</option>
</select>


<select name="age_de">
<option value="" selected></option>
<option value=18>18</option>
<option value=19>19</option>
.....
</select>


<select name="age_a">
<option value="" selected></option>
<option value=18>18</option>
<option value=19>19</option>
.....
</select>




</form>





Voici maintenant le code de la page : resultat_recherche.php (j'ai volontairement laisser tomber la recherche avec l'âge pour l'instant vu que rien qu'avec le critère sexe cela ne fonctionne pas)


<?
$db = mysql_connect($serveur, $login, $password);
mysql_select_db($base,$db);


$sexe = $HTTP_POST_VARS['sexe'];
$age_de = $HTTP_POST_VARS['age_de'];
$age_a = $HTTP_POST_VARS['age_a'];


#########################################
# Affichage du navigateur en bas de page
#########################################


function navigateur($nblignes,$debut,$limite) {


// Calcule le nombre devant posseder un lien d'accès
$pages=intval($nblignes/$limite);


// $pages contient la partie entière du résultat de la division...
// ...s'il y a un reste on ajoute une page
if ($nblignes%$limite) $pages++;


if ($pages > 1) {
// Creation des liens vers les pages virtuelles contenant les autres resultats
if ($debut>=$limite) { // On ne cree pas de lien "PRECEDENT" si debut vaut 0
$precdebut=$debut-$limite;
print "Page précédente\n";
}


for ($i=1;$i<=$pages;$i++) { // affichage des liens numerotes
$nouvdebut=$limite*($i-1);
if ($nouvdebut == $debut) { // numero sans lien
print " $i &nbsp;\n";
} else { // numero avec lien
print "$i&nbsp;\n";
}
}


// verification si nous sommes a la derniere page
if ($debut! =$limite*($pages-1)) {
// nous ne sommes pas a la derniere page donc il faut creer un lien "SUIVANT"
$nouvdebut = $debut+$limite;
print "Page suivante\n";
}


}
}


// La variable "limite" fixe le nombre maximum d'éléments affichés par page
$limite = 10;


// La variable "debut" permet de déterminer le point de départ de l'affichage des enregistrements
if (empty($debut)) $debut=0;


// Recuperation nombre de lignes $query "SELECT Count(*) FROM membre where sexe '$sexe'";
$numresultat = mysql_query($query);
$numrow = mysql_fetch_row($numresultat);
$nblignes = $numrow[0];


if ($nblignes > 0) {
// Recuperation liste des enregistrements $query "SELECT * FROM membre where sexe '$sexe'";
$query .= " ORDER BY pseudo";
$query .= " LIMIT $debut,$limite";
$resultats = mysql_query($query);


// Boucle sur les enregistrements pour leur affichage
while($row = mysql_fetch_array($resultats)) {
print "$row[pseudo]
";
echo "\n";
}


// Affichage du navigateur
navigateur($nblignes,$debut,$limite);
mysql_free_result($resultats);


} else print("aucun membres correspond aux critères de recherche \n");


?>


Si dans la requête je modifie : where sexe '$sexe' par : where sexe '2' (2 étant l'id du sexe homme) l'ensemble fonctionne correcterment.


Mais à partir du moment où il y a une variable dans la partie WHERE l'affichage n'est correcte que pour la page 1 et en page 2 j'ai comme résultat à l'affichage : "aucun membres correspond aux critères de recherche " alors que je devrais avoir la suite du résultat.


Merci d'avance à ceux qui essayeront de résoudre le problème.

2 réponses

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
3 févr. 2005 à 07:07
Salut!

Je vois 2 possibilités:



1) tu passes ton formulaire de POST en GET, et après tu transmet les infos de page en page pour construire ta requête



2) tu laisse ton formulaire en POST, mais crée 3 variables de sessions
avec les infos à passer et tu utilises ses variables pour transmettre
les infos... Ca offre l'avantage de ne pas avoir des urls surchargées
mais ca peut bloquer un peu les bots des moteurs de recherche...



Dis moi ce que tu préfère et on regardera...



Au fait, on utilise plus $HTTP_POST_VARS mais $_POST, idem pour $PHP_SELF et $_SERVER['PHP_SELF']



Autrement, tu as intérêt à prévoir le cas ou rien n'a été sélectionné:

<?php

// si la variable $_POST['sexe'] est définie, on l'utilise, sinon on utilise ''

$sexe = isset ( $_POST_['sexe'] ) ? $_POST_['sexe'] :'';

$age_de = isset ( $_POST_['age_de'] ) ? $_POST_['age_de'] :'';

$age_a = isset ( $_POST_['age_a'] ) ? $_POST_['age_a'] :'';

?>



@++





R@f


www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
greg62300 Messages postés 3 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 4 février 2005
4 févr. 2005 à 12:36
salut,

Merci pour ta réponse ça m'a permis de résourdre mon problème.

a+
0
Rejoignez-nous