Page 1 sur 2

afficher résultat à partir d'une liste déroulante

Posté : 06 févr. 2007, 12:52
par dread
Bonjour à tous.
Je débute en php et j'aurais bien besoin d'un pti coup de pouce!!
Je réalise un annuaire où sur une page est présent 8 enregistrements de camping contenu dans une base de données.
Je souhaiterais que sur cette page on puisse avoir la possibilité de filtrer les enregistrements de mes campings par ville. J'ai donc mis une liste déroulante où l'on retrouve l'ensemble des villes de mes enregistrements.
Un premier problème apparait: des doublons apparaissent et une même ville peut se retrouver plusieurs fois dans la liste.
Un deuxième problème: lorsque je choisit la ville et que je clique sur "ok" rien ne s'affiche et la liste revient à sa première valeur par défaut cad la 1ère ville par ordre alphabétique.
Pour illustrer le cheminement, lorsqu'un visiteur arrive sur la page camping, 8 enregistrements doivent apparaitre dans le désordre au niveau des villes. Le filtre doit alors permettre de n'afficher que les campings dont telle ville m'interesse et ce sur la même page qu'auparavant.
Je vous transmet le code php de ma page
<?php require_once('Connections/conn_develop.php'); ?>
<?php
$maxRows_rs_camping = 8;
$pageNum_rs_camping = 0;
if (isset($_GET['pageNum_rs_camping'])) {
  $pageNum_rs_camping = $_GET['pageNum_rs_camping'];
}
$startRow_rs_camping = $pageNum_rs_camping * $maxRows_rs_camping;

mysql_select_db($database_conn_develop, $conn_develop);
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";
$query_limit_rs_camping = sprintf("%s LIMIT %d, %d", $query_rs_camping, $startRow_rs_camping, $maxRows_rs_camping);
$rs_camping = mysql_query($query_limit_rs_camping, $conn_develop) or die(mysql_error());
$row_rs_camping = mysql_fetch_assoc($rs_camping);

if (isset($_GET['totalRows_rs_camping'])) {
  $totalRows_rs_camping = $_GET['totalRows_rs_camping'];
} else {
  $all_rs_camping = mysql_query($query_rs_camping);
  $totalRows_rs_camping = mysql_num_rows($all_rs_camping);
}
$totalPages_rs_camping = ceil($totalRows_rs_camping/$maxRows_rs_camping)-1;

mysql_select_db($database_conn_develop, $conn_develop);
$query_rs_ville = "SELECT ville_etab FROM tbl_etab ORDER BY ville_etab ASC";
$rs_ville = mysql_query($query_rs_ville, $conn_develop) or die(mysql_error());
$row_rs_ville = mysql_fetch_assoc($rs_ville);
$totalRows_rs_ville = mysql_num_rows($rs_ville);

mysql_select_db($database_conn_develop, $conn_develop);
if (!isset($_POST['ville'])) {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";

} else {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND ville_etab='". $_POST['ville'] ."'";
}

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Menu CSS avec contenu</title>
<meta name="Description" content="Comment faire un menu CSS"/>
<meta name="Keywords" content=" Menu CSS, menu CSS, menu déroulant, test menu horizontal, menu hover"/>
<link href="style1.css" rel="stylesheet" type="text/css" />
<link href="1_menu_bandeau_piedpage.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 6]>
		<link rel="stylesheet" type="text/css" href="style1_ie.css" media="screen" />
	<![endif]-->
				
			<script type="text/javascript">
			<!--
			window.onload=montre;
			function montre(id) {
			var d = document.getElementById(id);
			for (var i = 1; i<=10; i++) {
			if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
			}
			if (d) {d.style.display='block';}
			}
			//-->
			</script>
</head>

<body>
<div id="global">

	<?php
		include('menu_bandeau_piedpage.htm');
	?>
	
<div id="contenu">
	
	<table class="tri" height="35px" width="900px" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>Tri par ville</td>
    <td><form id="frm_parville" name="frm_parville" method="post" action="annuaire-camping.php">
          <label>
         <select name="ville" id="ville">
              <?php
do {  
?>
              <option value="<?php echo $row_rs_ville['ville_etab']?>"><?php echo $row_rs_ville['ville_etab']?></option>
              <?php
} while ($row_rs_ville = mysql_fetch_assoc($rs_ville));
  $rows = mysql_num_rows($rs_ville);
  if($rows > 0) {
      mysql_data_seek($rs_ville, 0);
	  $row_rs_ville = mysql_fetch_assoc($rs_ville);
  }
?>
       </select>  
	    </label>
		<label>   
    <input name="submit" value="Ok" type="submit" />
	</label>
	</form></td>
    <td>Tri par étoiles</td>
    <td><select name="trietoile">&nbsp;</select></td>
    <td><input name="Submit" value="Ok" type="submit" /></td>
  </tr>
</table>

	    <?php do { ?>
	      <table class="tableau" height="110px" width="461px" border="0" cellspacing="0" cellpadding="0" background="vignette_annuaire.gif">
	        
	        <tr>
	          <td class="photo" rowspan="4" height="97px" width="140px" ><img src="<?php echo $row_rs_camping['url_photo4']; ?>" alt="<?php echo $row_rs_camping['alt_photo1']; ?>"/></td>
        <td class="nom" colspan="2" width="315px" height="30px"><a href="camping.php?num_camping=<?php echo $row_rs_camping['id_camping']; ?>"><?php echo $row_rs_camping['nom_etab']; ?></a></td>
      </tr>
	        <tr>
	          <td width="315px" height="24px" colspan="2"><span class="Style1"><?php echo $row_rs_camping['cp_etab']; ?> <?php echo $row_rs_camping['ville_etab']; ?></span></td>
      </tr>
	        <tr>
	          <td colspan="2" width="315px" height="18px" valign="top"><span class="Style1"><?php echo $row_rs_camping['date_ouverture']; ?></span></td>
      </tr>
	        <tr>
	          <td width="150px" height="25px" valign="top"><span class="Style1"><?php echo '<img src="Images/etoile'.$row_rs_camping['nb_etoile_camping'].'.gif"  alt="Camping '.$row_rs_camping['nb_etoile_camping'].' étoiles"></img>'; ?></span></td>
        <td width="165px" height="25px" valign="top"><a href="camping.php?num_camping=<?php echo $row_rs_camping['id_camping']; ?>"><span class="Style1"> Fiche complète</span></a></td>
      </tr>
	        </table>
	      <?php } while ($row_rs_camping = mysql_fetch_assoc($rs_camping)); ?></div>
</body>
</html>
<?php
mysql_free_result($rs_camping);

mysql_free_result($rs_ville);
?>
Comme vous pourrez le voir, j'ai tenté de mettre une condition if else:
mysql_select_db($database_conn_develop, $conn_develop);
if (!isset($_POST['ville'])) {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";

} else {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND ville_etab='". $_POST['ville'] ."'";
}
afin d'afficher les résultats en fonction de l'action choisie.
En éspérant avoir été clair sur ce qui me tracasse, merci par avance pour toute aide apportée.

Posté : 06 févr. 2007, 14:06
par Maitrepylos
Pour les doublons va voir du côté de Mysql et de Distinc.

Posté : 06 févr. 2007, 15:38
par dread
Merci à toi Maitrepylos pour ta réponse rapide.
J'ai essayé SELECT DISTINCT et effectivement ca a réglé mon problème de doublons dans ma liste de choix.
Malheureusement, le problème qui me préoccupait le plus, à savoir faire en sorte que le tri par ville s'affiche dans ma page, n'est toujours pa résolu.
Comment faire pour que d'après une selection d'une ville dans une liste de choix, je puisse arriver au résultat souhaité.
Il faudrait que ma requête dise un truc comme ca:

$query_rs_ville= "SELECT nom_etab, adresse_etab, cp_etab, ville_etab, nb_etoile_camping 
FROM tbl_etab, tbl_camping 
WHERE tbl_etab.etab_id=tbl_camping.id_etab 
AND ville_etab='ce que j'ai selectionné dans la liste de choix'";

Mais comment récupérer la valeur selon la selection et la remettre dans cette requête?
Pour le moment j'utilise la méthode POST avec un truc du genre
ville_etab='".$_POST['ville']."'
mais ce ne marche pas!!!
Un coup de main svp...

Posté : 06 févr. 2007, 15:47
par Maitrepylos
tbl_etab.ville_etab='".$_POST['ville']."' 

Posté : 06 févr. 2007, 16:02
par dread
Ca ne marche toujours pas avec
tbl_etab.ville_etab='".$_POST['ville']."'
Merci de m'aider Maitrepylos.
Mais que pense tu de ces bouts de code:
mysql_select_db($database_conn_develop, $conn_develop);
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";
$query_limit_rs_camping = sprintf("%s LIMIT %d, %d", $query_rs_camping, $startRow_rs_camping, $maxRows_rs_camping);
$rs_camping = mysql_query($query_limit_rs_camping, $conn_develop) or die(mysql_error());
$row_rs_camping = mysql_fetch_assoc($rs_camping);
Celui-ci régit ma première requête à savoir l'affichage de mes enregistrements hors filtres
Puis,
mysql_select_db($database_conn_develop, $conn_develop);
$query_rs_ville = "SELECT DISTINCT ville_etab FROM tbl_etab ORDER BY ville_etab ASC";
$rs_ville = mysql_query($query_rs_ville, $conn_develop) or die(mysql_error());
$row_rs_ville = mysql_fetch_assoc($rs_ville);
$totalRows_rs_ville = mysql_num_rows($rs_ville);
Celui-ci permet de générer ma liste de choix des villes.
Ensuite,
mysql_select_db($database_conn_develop, $conn_develop);
if (!isset($_POST['ville'])) {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";

} else {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND tbl_etab.ville_etab='".$_POST['ville']."'";
}
qui doit me permettre sur une même page d'afficher soit le résultat de ma 1ère requête quand on arrive sur la page "annuaire-camping" depuis un sous menu ou d'afficher toujours sur la même page le résultat de ma 2nde requête à savoir après utilisation du filtre par ville.
Enfin:
<td>Tri par ville</td>
    <td><form id="frm_parville" name="frm_parville" method="post" action="annuaire-camping.php">
          <label>
         <select name="ville" id="ville">
              <?php
do {  
?>
              <option value="<?php echo $row_rs_ville['ville_etab']?>"><?php echo $row_rs_ville['ville_etab']?></option>
              <?php
} while ($row_rs_ville = mysql_fetch_assoc($rs_ville));
  $rows = mysql_num_rows($rs_ville);
  if($rows > 0) {
      mysql_data_seek($rs_ville, 0);
	  $row_rs_ville = mysql_fetch_assoc($rs_ville);
  }
?>
       </select>  
	    </label>
		<label>   
    <input name="submit" value="Ok" type="submit" />
	</label>
	</form></td>
qui est le code de mon menu déroulant contenant la liste des villes.
Je pense que mon problème doit se situer sur l'un de ces bouts de code mais je ne sais absolument pas où. Qui plus est, lorsque je choisit une ville au choix, la page se recharge mais rien ne change si ce n'est la ville dans ma liste qui retourne à la première entrée. comme si on rechargeait la page à nouveau dans l'état qu'elle est lorsque l'on vient du sous-menus camping.
Aurais-tu une idée la-dessus.
Je continue de scruter les posts à la recherche d'une éventuelle solution.

Posté : 06 févr. 2007, 16:30
par Maitrepylos
Où est traité cette ligne?
if (!isset($_POST['ville'])) {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";

} else {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND ville_etab='". $_POST['ville'] ."'";
}

Posté : 06 févr. 2007, 16:35
par dread
Elle est traitée sur la même page. Je prend les informations issues de la requête suivant qu'on vienne du sous-menus camping (=première hypothèse) ou que l'on est choisit une ville comme filtre (=2nde hypothèse avec le POST)
</table>

	    <?php do { ?>
	      <table class="tableau" height="110px" width="461px" border="0" cellspacing="0" cellpadding="0" background="vignette_annuaire.gif">
	        
	        <tr>
	          <td class="photo" rowspan="4" height="97px" width="140px" ><img src="<?php echo $row_rs_camping['url_photo4']; ?>" alt="<?php echo $row_rs_camping['alt_photo1']; ?>"/></td>
        <td class="nom" colspan="2" width="315px" height="30px"><a href="camping.php?num_camping=<?php echo $row_rs_camping['id_camping']; ?>"><?php echo $row_rs_camping['nom_etab']; ?></a></td>
      </tr>
	        <tr>
	          <td width="315px" height="24px" colspan="2"><span class="Style1"><?php echo $row_rs_camping['cp_etab']; ?> <?php echo $row_rs_camping['ville_etab']; ?></span></td>
      </tr>
	        <tr>
	          <td colspan="2" width="315px" height="18px" valign="top"><span class="Style1"><?php echo $row_rs_camping['date_ouverture']; ?></span></td>
      </tr>
	        <tr>
	          <td width="150px" height="25px" valign="top"><span class="Style1"><?php echo '<img src="Images/etoile'.$row_rs_camping['nb_etoile_camping'].'.gif"  alt="Camping '.$row_rs_camping['nb_etoile_camping'].' étoiles"></img>'; ?></span></td>
        <td width="165px" height="25px" valign="top"><a href="camping.php?num_camping=<?php echo $row_rs_camping['id_camping']; ?>"><span class="Style1"> Fiche complète</span></a></td>
      </tr>
	        </table>
	      <?php } while ($row_rs_camping = mysql_fetch_assoc($rs_camping)); ?></div>
C'est ce que tu voulais savoir??

Posté : 06 févr. 2007, 16:40
par Maitrepylos
et comme ceci
<?php require_once('Connections/conn_develop.php'); ?>
<?php
$maxRows_rs_camping = 8;
$pageNum_rs_camping = 0;
if (isset($_GET['pageNum_rs_camping'])) {
  $pageNum_rs_camping = $_GET['pageNum_rs_camping'];
}
$startRow_rs_camping = $pageNum_rs_camping * $maxRows_rs_camping;

mysql_select_db($database_conn_develop, $conn_develop);
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";
$query_limit_rs_camping = sprintf("%s LIMIT %d, %d", $query_rs_camping, $startRow_rs_camping, $maxRows_rs_camping);
$rs_camping = mysql_query($query_limit_rs_camping, $conn_develop) or die(mysql_error());
$row_rs_camping = mysql_fetch_assoc($rs_camping);

if (isset($_GET['totalRows_rs_camping'])) {
  $totalRows_rs_camping = $_GET['totalRows_rs_camping'];
} else {
  $all_rs_camping = mysql_query($query_rs_camping);
  $totalRows_rs_camping = mysql_num_rows($all_rs_camping);
}
$totalPages_rs_camping = ceil($totalRows_rs_camping/$maxRows_rs_camping)-1;

mysql_select_db($database_conn_develop, $conn_develop);
$query_rs_ville = "SELECT ville_etab FROM tbl_etab ORDER BY ville_etab ASC";
$rs_ville = mysql_query($query_rs_ville, $conn_develop) or die(mysql_error());
$row_rs_ville = mysql_fetch_assoc($rs_ville);
$totalRows_rs_ville = mysql_num_rows($rs_ville);

mysql_select_db($database_conn_develop, $conn_develop);
if (!isset($_POST['ville'])) {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";

} else {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND ville_etab='". $_POST['ville'] ."'";
}

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Menu CSS avec contenu</title>
<meta name="Description" content="Comment faire un menu CSS"/>
<meta name="Keywords" content=" Menu CSS, menu CSS, menu déroulant, test menu horizontal, menu hover"/>
<link href="style1.css" rel="stylesheet" type="text/css" />
<link href="1_menu_bandeau_piedpage.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 6]>
        <link rel="stylesheet" type="text/css" href="style1_ie.css" media="screen" />
    <![endif]-->

            <script type="text/javascript">
            <!--
            window.onload=montre;
            function montre(id) {
            var d = document.getElementById(id);
            for (var i = 1; i<=10; i++) {
            if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
            }
            if (d) {d.style.display='block';}
            }
            //-->
            </script>
</head>

<body>
<div id="global">

    <?php
        include('menu_bandeau_piedpage.htm');
    ?>

<div id="contenu">

    <table class="tri" height="35px" width="900px" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>Tri par ville</td>
    <td><form id="frm_parville" name="frm_parville" method="post" action="annuaire-camping.php">
          <label>
         <select name="ville" id="ville">
              <?php
do {
?>
              <option value="<?php echo $row_rs_ville['ville_etab']?>"><?php echo $row_rs_ville['ville_etab']?></option>
              <?php
} while ($row_rs_ville = mysql_fetch_assoc($rs_ville));
  $rows = mysql_num_rows($rs_ville);
  if($rows > 0) {
      mysql_data_seek($rs_ville, 0);
      $row_rs_ville = mysql_fetch_assoc($rs_ville);
  }
?>
       </select>
        </label>
        <label>
    <input name="submit" value="Ok" type="submit" />
    </label>
    </form></td>
    <td>Tri par étoiles</td>
    <td><select name="trietoile">&nbsp;</select></td>
    <td><input name="Submit" value="Ok" type="submit" /></td>
  </tr>
</table>


          <table class="tableau" height="110px" width="461px" border="0" cellspacing="0" cellpadding="0" background="vignette_annuaire.gif">
            <?php while ($row_rs_camping = mysql_fetch_assoc($rs_camping));{ ?>
            <tr>
              <td class="photo" rowspan="4" height="97px" width="140px" ><img src="<?php echo $row_rs_camping['url_photo4']; ?>" alt="<?php echo $row_rs_camping['alt_photo1']; ?>"/></td>
        <td class="nom" colspan="2" width="315px" height="30px"><a href="camping.php?num_camping=<?php echo $row_rs_camping['id_camping']; ?>"><?php echo $row_rs_camping['nom_etab']; ?></a></td>
      </tr>
            <tr>
              <td width="315px" height="24px" colspan="2"><span class="Style1"><?php echo $row_rs_camping['cp_etab']; ?> <?php echo $row_rs_camping['ville_etab']; ?></span></td>
      </tr>
            <tr>
              <td colspan="2" width="315px" height="18px" valign="top"><span class="Style1"><?php echo $row_rs_camping['date_ouverture']; ?></span></td>
      </tr>
            <tr>
              <td width="150px" height="25px" valign="top"><span class="Style1"><?php echo '<img src="Images/etoile'.$row_rs_camping['nb_etoile_camping'].'.gif"  alt="Camping '.$row_rs_camping['nb_etoile_camping'].' étoiles"></img>'; ?></span></td>
        <td width="165px" height="25px" valign="top"><a href="camping.php?num_camping=<?php echo $row_rs_camping['id_camping']; ?>"><span class="Style1"> Fiche complète</span></a></td>
      </tr>

          <?php } ?></table></div>
</body>
</html>
<?php
mysql_free_result($rs_camping);

mysql_free_result($rs_ville);
?>


Posté : 06 févr. 2007, 16:58
par dread
Après avoir bien scrupuleusement détécté tous les hangements que tu souhaite apporter à mon code, il en résulte ceci:
Tu as enlevé le DISTINCT de ma requête ce qui fait que les doublons risquent de revenir dans la liste déroulante.
Tu as enlevé le tbl_camping devant ville_etab dans la requête avec POST.
Tu as mis le while de ma région répétée à la place du "do" et dans ma table au lieu d'au dessus. Pour cette dernière solution, on m'avait aussi conseillé de faire la même chose. Cependant il en résultait que 7 enregistrements sur les 8 prévus ne s'affichaient réellement sur la page et si je n'avais qu'un seul enregistrement dans ma base de données, ce dernier ne s'affichait même plus.
Est-ce que j'ai bien tout trouvé?

Posté : 06 févr. 2007, 17:24
par Maitrepylos
Heu en fait j'ai fais un copier coller de ton premier post.

Je n'ai effectivement que modifier le do while()(je n'ai rien touché d'autre).
Cependant il en résultait que 7 enregistrements sur les 8 prévus ne s'affichaient réellement sur la page et si je n'avais qu'un seul enregistrement dans ma base de données, ce dernier ne s'affichait même plus.
peux-tu m'en dire plus

Posté : 06 févr. 2007, 17:40
par dread
En fait on m'avait conseillé la même synthaxe que la tienne pour éviter, lorsqu'aucun enregistrement n'était disponible, que l'image de background des vignettes de ma page annuaire ne s'affiche sans aucune données à l'intérieur.
Cependant, sur les 8 enregistrements de ma région répétée seuls 7 ne s'affichaient et lorsque je mettait 9 enregistrements max au lieu des 8, il apparaissait alors 8 enregistrements sur ma première page mais plus que 1 sur la deuxième page alors que j'avais 10 enregistrements sur ma base de donnée. Bref, ca m'en supprimait un à chaque fois, ce qui fait que pour une future page pour les hotels par exemple où je n'avait qu'un seul enregistrement, plus rien ne s'affichait avec cette méthode.
Alors erreur de manipulation ou incompatibilité de la méthode avec mon code, j'ai essayé plusieurs positionnement du "while" et rien n'y faisait.

Au fait, j'ai essayé autre chose pour ma page:
J'ai supprimé la partie du code avec le if else et modifié ma première requête rs_camping en y joutant le
AND ville_etab="'.$_POST['ville'].'"
pour vérifier si le POST prenait bien comme valeur le nom d'une ville selectionnée dans la liste.
Il en résulte que cela fonctionne bien. Je peut à présent afficher les résultats par ville. Néanmoins, je n'arrive pas à dire que si la personne viens du lien présent sur le sous-menu "camping" tous les enregistrements doivent s'afficher et que sur la même page si je choisit de filtrer par ville seul les enregistrements concernés doivent s'afficher.

Posté : 06 févr. 2007, 17:52
par Maitrepylos
As-tu essayé ta requète dans phpmyadmin par exemple, en remplaçant $_post par le nom d'une ville pour voir le résultat.

Posté : 06 févr. 2007, 18:01
par dread
ma requête fonctionne bien en remplacant le post directement par le nom d'une ville. Je pense que la seule chose qui ne soit pas comprise, c'est quand je met la condition if else.
J'envisage mon problème sous un nouvel aspect. Ma page fonctionne avec le filtre par ville quand je supprime la condition if else et que je rajoute le $_POST directement à ma première requête.
Cependant, quand je viens du lien du sous menu, aucun résultat ne s'affiche tant que je n'ai pas selectionné un nom dans la liste.
Serait-il possible d'avoir un filtre appelé "afficher toutes les villes" se placant au dessus du premier nom de ville et qui soit généré quand on vient du lien "camping" ou est-ce que ca revient au même que ce que j'essaie de faire depuis tout à l'heure??

Posté : 07 févr. 2007, 10:10
par Maitrepylos
Heu je nage un peu là , il est où ton sous menu?

Posté : 07 févr. 2007, 12:47
par dread
Je comprends que ce ne soit pas facile. Voici une illustration de ma page:
http://develop.web.free.fr/ff.JPG
Comme tu pourras voir j'ai une barre de menus en haut rouge. Lorsqu'un visiteur passe la souris sur le menu hebergement, un sous menu apparait dans lequel se trouve "camping". Une fois camping selectionné, il est redirigé vers la page que tu peux voir avec les 8 enregistrements. Le menu reste bien sûr visible aussi sur cette page.
A présent, tu peux voir le filtre par ville qui apparait en dessous de ce menu rouge. La liste des villes s'affiche dans la liste déroulante.
Depuis hier soir, j'ai réussi quelques petits trucs.
En effet, le filtre par ville fonctionne à présent et lorsque l'on clique sur le "fameux" sous menu "camping du menu rouge, tous les enregistrements réaparaissent. Voici le code qui fonctionne:
<?php require_once('Connections/conn_develop.php'); ?>
<?php
$maxRows_rs_camping = 8;
$pageNum_rs_camping = 0;
if (isset($_GET['pageNum_rs_camping'])) {
  $pageNum_rs_camping = $_GET['pageNum_rs_camping'];
}
$startRow_rs_camping = $pageNum_rs_camping * $maxRows_rs_camping;

mysql_select_db($database_conn_develop, $conn_develop);
$query_rs_touscamping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";
$query_limit_rs_touscamping = sprintf("%s LIMIT %d, %d", $query_rs_touscamping, $startRow_rs_touscamping, $maxRows_rs_touscamping);
$rs_touscamping = mysql_query($query_limit_rs_touscamping, $conn_develop) or die(mysql_error());
$row_rs_touscamping = mysql_fetch_assoc($rs_touscamping);

if (isset($_GET['totalRows_rs_camping'])) {
  $totalRows_rs_camping = $_GET['totalRows_rs_camping'];
} else {
  $all_rs_camping = mysql_query($query_rs_camping);
  /*$totalRows_rs_camping = mysql_num_rows($all_rs_camping);*/
}
$totalPages_rs_camping = ceil($totalRows_rs_camping/$maxRows_rs_camping)-1;

mysql_select_db($database_conn_develop, $conn_develop);
$query_rs_ville = "SELECT DISTINCT ville_etab FROM tbl_etab ORDER BY ville_etab ASC";
$rs_ville = mysql_query($query_rs_ville, $conn_develop) or die(mysql_error());
$row_rs_ville = mysql_fetch_assoc($rs_ville);
$totalRows_rs_ville = mysql_num_rows($rs_ville);

mysql_select_db($database_conn_develop, $conn_develop);
if (isset($_POST['ville'])) {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND ville_etab='".$_POST['ville']."'";
} else {
$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, url_photo4, alt_photo1, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab";
}

$query_limit_rs_camping = sprintf("%s LIMIT %d, %d", $query_rs_camping, $startRow_rs_camping, $maxRows_rs_camping);
$rs_camping = mysql_query($query_limit_rs_camping, $conn_develop) or die(mysql_error());
$row_rs_camping = mysql_fetch_assoc($rs_camping);
?>
J'ai tout simplement nommé de facon différente ma première requête en rs_touscamping et laissé rs_camping dans la condition if...else.

Cependant, d'un point de vue de la navigation, si un visiteur après avoir effectué quelques filtres par ville souhaite retourner à un affichage où toutes les enregistrements seraient à nouveau tous visibles, il n'a d'autre choix que de faire "précédenteé autant de fois qu'il a fait de filtres ou en recliquant sur le sous menu "camping". Mais je doute que cette dernière solution ne lui saute aux yeux.
C'est pourquoi, je te parlais d'une possibilité de rajouter dans la liste déroulante du filtre par ville un "afficher tous les campings".
J'ai essayé cette possibilité en rajoutant dans le code un option value "afficher tous les campings":
<td>Tri par ville</td>
    <td><form id="frm_parville" name="frm_parville" method="post" action="annuaire-camping.php">
          <label>
         <select name="ville" id="ville">
		 <option value="<?php echo $row_rs_ville['ville_etab']?>">Afficher tous les campings</option>
              <?php
do {  
?>
			  
              <option value="<?php echo $row_rs_ville['ville_etab']?>"><?php echo $row_rs_ville['ville_etab']?></option>
              <?php
} while ($row_rs_ville = mysql_fetch_assoc($rs_ville));
  $rows = mysql_num_rows($rs_ville);
  if($rows > 0) {
      mysql_data_seek($rs_ville, 0);
	  $row_rs_ville = mysql_fetch_assoc($rs_ville);
  }
?>
Ce nouveau filtre apparait bien dans la liste des choix mais je ne sais absolument pas comment lui affecter comme action de réafficher tous les résultats comme le ferait le sous menu "camping".