Problème de pagination
Bonjour tout le monde,
Je vous explique mon problème.
J'ai une page php :
au début une liste déroulante remplie par une reqûete et en fonction de son choix après un on Change l'affichage est différent jusqu'ici aucun problème. Après avoir lu le tutoriel sur la pagination l'avoir correctement étudié un problème apparaît :
Car au départ je l'ai adapté mais sans ma liste déroulante et il marche très bien félication a LA GLOBULE cependant dès que je rajoute ma liste déroulante il y a un problème, c'est à dire que m'a première page s'affiche correctement par contre quand je clique pour aller à la page suivante je me retrouve juste avec ma liste déroulante comme sur ma 1ère page lorque l'utilisateur n'a pas fait encore son choix.
Donc si vous voyez une solution pour ce problème merci d'avance !
Jérémy
Il te faut coller un paramètre dans l'url te permettant de savoir quelle option a été choisie dans la liste déroulante.
Pour cela, je te conseille de faire passer les valeurs de ton formulaire en GET.
Je ne vois pas trop je te mets ma page de code si tu peux me donner une indication en plus avec le code. En sachant que la pagination vient du tutoriel du site et que la fonction barre_navigation et sur ma page d'index qui elle à des includes.
Voici ma page où je souhaite mettre ma pagination :
<p><!--Formulaire-->
<form name="formulaire" action="./index.php?page=test&categorie=search" method="post" id="site">
</p>
<p align="center"><?php $requete='SELECT id_site,lib_site FROM sites order by lib_site';
$resultat= mysql_query($requete);?>
<select name="choix" onChange="document.forms['site'].submit();">
<option value="0">Choisissez un site</option>
<?php
while ($donnees = mysql_fetch_array($resultat)){
echo '<option value='.$donnees[0].'>';
echo $donnees[1];
echo'</option>';
}
?>
</select></p>
<?php
// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
if(isset($_POST['choix'])){
$sql = 'SELECT count(*) FROM batiments where id_site = '.$_POST['choix'].' ';
// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);
// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
echo ' Aucune réponse trouvée';
}
else { ?>
<p align="center">
<p align="center">
<p align="center">
<?php if(isset($_POST['choix'])){
$requete2="SELECT lib_site FROM sites
WHERE id_site ='".$_POST['choix']."'
";
$resultat2=mysql_query($requete2);
while ($donnees2 = mysql_fetch_array($resultat2)){
?>
Voici tous les bâtiments du site suivant : <strong><?php echo $donnees2['lib_site'];?></strong><br><br>Pour plus d'informations sur un bâtiment, cliquez sur son nom.<br><br> <?php }
echo '<div align="center"><table width="500px" border="1" align="center">
<tr>
<td><div align="center"><strong>Code Bâtiment</strong></div></td>
<td><div align="center"><strong>Nom Bâtiment</strong></div></td>
<td><div align="center"><strong>Nb Etage Bâtiment</strong></div></td>
<td><div align="center"><strong>Fonction Bâtiment</strong></div></td>
</tr>';
// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$nb_affichage_par_page = 1;
// Préparation de la requête avec le LIMIT
$sql = 'SELECT code_bat, nom_bat, nbEtage_bat, fct_bat, id_bat, lib_site FROM batiments B, sites S
WHERE B.id_site='.$_POST['choix'].'
AND S.id_site = B.id_site
ORDER BY code_bat ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
// on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($req)) {
// on affiches les résultats dans la <table> ?>
<tr><td><div align="center"><?php echo $data['code_bat'];?></div></td><td><div align="center"><?php
echo '<a href="./index.php?page=info_bat&categorie=batiment&choix='.$data['id_bat'].'">'.$data['nom_bat'].'</a>';?></div></td><td><div align="center"><?php
echo $data['nbEtage_bat'];?></div></td><td><div align="center"><?php
echo $data['fct_bat'];?></div></td></tr><?php
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
echo '</table><br />';
// on affiche enfin notre barre
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 1).'</span>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
echo '</table><br />';
}
?>
</form></div></p>
<?php } ?>
Et voici mes includes dans ma page d'index :
<?php
if(isset($_GET['page'])){
include("./".$_GET['categorie']."/".$_GET['page'].".php");
}else{
if(!isset($_SESSION['identifiant']) && !isset($_SESSION['motdepasse'])){
include("./accueil.php");
}else{
include("./accueil.php"); ?>
<?php
}
}
?>
Merci d'avance.
Jérémy
si je comprends bien, c'est sur la page "index.php?page=test&categorie=search" que la liste déroulante se réinitialise ?
Je vais peut-être dire une bétise, mais, est-ce que tu as essayé :
<form name="formulaire" action="./index.php?page=test&categorie=search" method="post" id="site">
</p>
<p align="center"><?php $requete='SELECT id_site,lib_site FROM sites order by lib_site';
$resultat= mysql_query($requete);?>
<select name="choix" onChange="document.forms['site'].submit();">
<option value="0">Choisissez un site</option>
<?php
while ($donnees = mysql_fetch_array($resultat)){
//--
if(!empty($_POST["choix"]) &&($donnees[0] == $_POST["choix"]) $selected = "selected='selected'";
else $selected = "";
//--
echo '<option value='.$donnees[0].' '.$selected.' >';
echo $donnees[1];
echo'</option>';
}
?>
</select>
</p>
Ca sert juste à indiquer dans le champ de la liste déroulante, l'option qui avait été choisie.
Maintenant, je ne sais pas si c'est exactement ce que tu voulais (et je ne garantis rien :p)
Pour cela, je te conseille de faire passer les valeurs de ton formulaire en GET.
Je ne peux rien ajouter de plus.
Tant que tu restera en POST, ca ne fonctionnera pas.
Tout mes Post je les ai changé en GET et il ne se passe plus rien
Jérémy
Merci pour ton aide InTheMix, j'avais déja essayé avec le selected mais d'une autre façon mais cela ne marche pas et avec ta façon à toi non plus.
Jérémy
Quand le onchange se fait, tu arrives sur quelle URL ?
Et quand tu es sur cette URL, quelles sont les URL de la barre de navigation ?
J'arrive sur ma ge page d'accueil avec index.php?choix='choix liste déroulante' alors que l'action du formulaire n'est pas du tout ça
Jérémy
onChange="document.forms['site'].submit();"
es tu sur de soumettre le bon formulaire ?