Problème requête sql

Fermé
fabe - 19 juil. 2009 à 16:28
 fabe - 19 juil. 2009 à 20:47
Bonjour,

ci-dessous le code extrêmement long de ma page.
Cette page se divise en gros en deux parties en fonction des informations que reçoit la page en POST.
Si elle reçoit une variable POST elle doit afficher des résultats de recherche différents que si la page est chargée normalement.
J'ai fait un echo() sur la variable $_POST['ville'] et elle me renvoit bien le résultat attendu.
J'ose penser que le problème se situe dans ma première requête SQL, à savoir :

 $sql = "SELECT * FROM `options_gites`,`annonces` WHERE ville='". $_POST['ville'] ."' ORDER BY Annonce_ID ";


sachant que le champ ville ne se trouve que dans la table options_gites et Annonce_ID dans la table annonces.
Il me sort des résultats incohérents. Par exemple, s'il y a deux résultats correspondants dans la bdd, il m'en renvoit 52, soit 2*26, 26 étant le nombre total d'annonces sur le site.

<!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">
<head>

<?php require_once ('libs/connexion_bdd.php'); ?>

// [..] Je vous fais grâce des balises meta
<script type="text/javascript" src="include/js/popup_load.js"></script>
<script type="text/javascript" src="include/js/favoris.js"></script>
<link href="include/css/misenpage.css" rel="stylesheet" type="text/css" />
<link href="include/css/contenu_desc.css" rel="stylesheet" type="text/css" />

</head>


<body>
<div id="hautPage">

  <div id="contenuHaut"></div>
</div>
<div id="contenuPage">
  <div id="contenuCoteGauche">
    <ul id="contenuMenu">
      <li><a id="menu1" href="index.php" title="ACCUEIL">Accueil</a></li>
	  <li><a id="menu2" href="hebergements.php" title="H&Eacute;BERGEMENTS">H&eacute;bergements</a></li>
	  <li><a id="menu3" href="index.php" title="LE PAYS CATALAN">Le Pays Catalan</a></li>
	  <li><a id="menu4" href="pages_stat/qui_sommes.php" title="QUI SOMMES-NOUS ?">Qui sommes-nous ?</a></li>
	  <li><a id="menu5" href="pages_stat/espace_prop.php" title="ESPACE PROPRI&Eacute;TAIRES">Espace propri&eacute;taires</a></li>
	  <li><a id="menu6" href="pages_stat/conditions.php" title="CONDITIONS G&Eacute;N&Eacute;RALES DE VENTE">Conditions g&eacute;n&eacute;rales</a></li>
	  <li><a id="menu7" href="contact.php" title="N'H&Eacute;SITEZ PAS &Agrave; NOUS CONTACTER">Nous contacter</a></li> </ul>
  </ul></div>	
 <?php if (isset($_POST['ville'])) {
 
 $sql = "SELECT * FROM `options_gites`,`annonces` WHERE ville='". $_POST['ville'] ."' ORDER BY Annonce_ID ";
 $req = mysqli_query($connexion,$sql) or die('Erreur SQL !'.$sql.''.mysqli_error($sql));

// Test
echo mysqli_num_rows($req); // renvoit le nombre de résultats réels *26, soit le nombre total d'annonces
 echo $_POST['ville'];
 // Test

 $donnees = $req->fetch_array();

 // lecture et affichage de titreFR 
     while(	$row = $req->fetch_array()) {
	 
	  echo '
 
	  <div><div  class="annonce">
	<div class="refs" style="width:450px"><p style="text-transform:capitalize;">'; echo $row['pays']; echo ' - '; echo $row['region']; echo ' - '; if ($row['departement'] == aucun) { echo ''; } else {echo $row['departement'] . ' - '; } echo $row['secteur']; echo ' - N° : '; echo $row['opt_gites']; echo '.</p></div>
	<div class="vignette"><a href="detail_annonces.php?page=' . $row['opt_gites'] . '"><img src="im_spc/'.$row['opt_gites'].'/pics/v-fr-photo1.jpg" /><br /><span style="font-size:10px; padding:0 0 0 5px">D&eacute;tail de l\'annonce</span></a></div>
	<div class="refs">'; echo $row['ville'];
	echo '</div>
	<div class="refs">
		<p>';
	 
     echo $row["titreFR"];
     
       echo '
		</p>
	</div>
	
	<div class="refs"><p><b>G&icirc;te</b> : <b>'; echo $row['nombre_de_personnes']; echo ' personne(s)</b> - '; echo $row['surface']; echo ' m2 - '; echo $row['nombre_de_pieces']; echo ' pi&egrave;ce(s) - '; echo $row['nombre_de_chambres']; echo ' chambre(s).</p></div>
	<div class="refs"><p><b>'; echo $row['semaine_basse_saison']; echo ' &euro; &agrave; '; echo $row['semaine_tres_haute_saison']; echo ' &euro; par semaine.</b></p></div>
	<div class="refs">';  if (empty($row['ville_alentours'])) {echo '';}
										else { echo '<span style="text-transform:capitalize;">' . $row['ville_alentours'] . ' : ' . $row['d_ville_alentours'] . ' km<span style="text-transform:none;">(s)</span> </span> - ' ;}
						  if (empty($row['prefecture'])) {echo '' ;}
										else { echo '<span style="text-transform:capitalize;">' . $row['prefecture'] . ' : ' . $row['d_prefecture'] . ' km<span style="text-transform:none;">(s)</span> </span>' ;}
						  if (empty($row['d_argeles'])) {echo '';}
										else {echo '<p>Argel&egrave;s sur mer : ' . $row['d_argeles'] . ' km(s) ' . ' - ';}
						  if (empty($row['d_perpignan'])) { echo ''; }
										else { echo 'Perpignan : ' . $row['d_perpignan'] .' km(s) - ';}
  						  if (empty($row['d_andorre'])) { echo ''; }
										else { echo'<br />Andorre : ' . $row['d_andorre'] . ' km(s) - ';}
						  if (empty( $row['d_mer'])) {echo ''; } 
										else { echo 'Mer : ' . $row['d_mer'] . ' km(s)';}
						  if (empty( $row['d_montagne'])) {echo ''; } 
										else {echo ' - Montagne : ' . $row['d_montagne'] . ' km(s).</p>';}
										echo '.</div><div class="refs"><p>&nbsp;</p></div></div>
										
										 <hr class="separation" />';
    
     }   echo '  <div id="basPage">
  
	<a href=""></a>&nbsp;&nbsp;-&nbsp;&nbsp;
	<a href="javascript:void(aj_favoris());">AJOUTER AUX FAVORIS</a>&nbsp;&nbsp;-&nbsp;&nbsp;
	<a href="#popMention" class="pop" onmouseup="window.scroll(0,0);">MENTIONS L&Eacute;GALES</a> 
	<br /><br />
	 <a href=""></a>
</div>



<div id="popMention">
	<div id="ligneFermer"><a href="#popMention" class="pop">X</a></div>
	<div class="ligne" style="text-align:center; "><b>MENTIONS L&Eacute;GALES</b></div>


	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
</div>
</body>
</html>';


 // on libère le résultat
 mysqli_free_result($req);
	
	 } else {
 
 $nombreresultat = 8;

// On récupère le nombre total de données
$sql = "SELECT COUNT(*) AS Annonce_ID FROM `annonces`";
$retour = mysqli_query($connexion,$sql) or die('Erreur SQL !'.$sql.''.mysqli_error($retour));
$donnees = $retour->fetch_array();
$totalresult = $donnees['Annonce_ID'];

// On calcule le nombre de pages à créer
$nombreDePages = ceil($totalresult / $nombreresultat );

if (isset($_GET['page']))
{
$page = $_GET['page'];
}
else
{
$page = 1;
}

$premier_res = ($page - 1) * $nombreresultat ;

?>

<div id="contenuCoteDroit"> 
    <div class="contenuRecherche">
      <h5 class="titreRecherche">Rechercher un g&icirc;te</h5>
      <form name="formRecherche" id="formRecherche" method="post" action="transactions.php">
	  	<ul>
			<li>
			
			<select name="secteur" id="secteur">
		
		<option value="secteur">Pr&eacute;cisez une zone</option>
		<option value="campagne">Campagne</option>
		<option value="montagne">Montagne</option>
		
			</select>
</li>
			<li>
			
			<select name="ville" id="ville">
		
		<option value="ville">Précisez une ville</option>
		<option value="argeles">Argelès sur mer</option>
		<option value="catllar">Catllar</option>
		<option value="caudies">Caudiès de fenouillèdes</option>
		<option value="font_romeu">Font romeu odeillo via</option>
		<option value="fuilla">Fuilla</option>
		<option value="ille">Ille sur têt</option>
		<option value="albère">L albère</option>
		<option value="bastide">La bastide</option>
		<option value="molitg">Molitg les bains</option>
		<option value="rabouillet">Rabouillet</option>
		<option value="rigarda">Rigarda</option>
		<option value="saint_nazaire">Saint nazaire</option>
		<option value="saint_pierre">Saint pierre dels forcats</option>
		
			</select>
</li>
			<li>
			
			<input name="envoyer" id="boutonRecherche" type="submit" value="RECHERCHER" />

			</li>
		</ul>
      </form>
    </div>
    <div class="contenuRecherche">
      <h5 class="titreRecherche">Rechercher sur la carte</h5>

      <div id="loupe"><a href="pages_stat/carte.php"><img src="images/loupe.jpg" /></a></div>
    </div>
  </div>  
	<?php
	
$req = mysqli_query($connexion,"SELECT * FROM `annonces`");
$num_rows = $req->num_rows;

// Je définis le nombre de résultats par pages
$nombreresultat = 8;

// On récupère le nombre total de données
$sql = "SELECT COUNT(*) AS Annonce_ID FROM `annonces`";
$retour = mysqli_query($connexion,$sql) or die('Erreur SQL !'.$sql.''.mysqli_error($req));
$donnees = $retour->fetch_array();
$totalresult = $donnees['Annonce_ID'];

// On calcule le nombre de pages à créer
$nombreDePages = ceil($totalresult / $nombreresultat );


	?>  
  <div id="contenuTexte"> 
<div id="texte">
	<div id="imgHautPage"><img src="images/fd_hebergements.jpg" /></div>
	<div>
		<p id="resultat"><?php echo $num_rows; ?> r&eacute;sultat(s)</p>

		<p id="page">Page <?php echo $page . ' /' . $nombreDePages; ?>
	</div>
	<p>&nbsp;</p>
	<div><ul id="menuNavig">
	

		
				<li><< <a id="pagePrecedente" href="<?php if ($page <= 1) { echo '#"'; } else { echo 'hebergements.php?page=' . ($page - '1') . ''; } ?>">Page pr&eacute;c&eacute;dente</a></li>
				<li style="color:#fff;">[</li>
<?php

for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
echo '<li><a href="hebergements.php?page=' . $i . '">' . $i . '</a></li> ';
}

?> 
				<li style="color:#fff;">]</li>
<li><a id="pageSuivante" href="<?php  if ($page >= $nombreDePages ) { echo '#"'; } else { echo 'hebergements.php?page=' . ($page + '1') . '';} ?>">Page suivante</a> >></li>


	
</ul>

</div></div></div>
	<?php
	
$req = mysqli_query($connexion,"SELECT * FROM `annonces`  INNER JOIN `options_gites` ON Annonce_ID=opt_gites ORDER BY Annonce_ID LIMIT " . $premier_res. ", " . $nombreresultat );
$num_rows = mysqli_num_rows($req);

// TEST
$req_opt = mysqli_query($connexion,"SELECT * FROM `options_gites` ORDER BY opt_gites");
$row_opt = $req_opt->fetch_array();
//TEST

// si $num_rows contient des résultats.
if($num_rows) {

 
	   
     // lecture et affichage des annonces
     while(	$row = $req->fetch_array()) {
	 
	  echo '
 
	  <div><div   style="margin-left:200px;" class="annonce">
	<div class="refs" style="width:450px"><p style="text-transform:capitalize;">'; echo $row["pays"]; echo ' - '; echo $row['region']; echo ' - '; if ($row['departement'] == aucun) { echo ''; } else {echo $row['departement'] . ' - '; } echo $row['secteur']; echo ' - N° : '; echo $row['opt_gites']; echo '.</p></div>
	<div class="vignette"><a href="detail_annonces.php?page=' . $row['opt_gites'] . '"><img src="im_spc/'.$row['opt_gites'].'/pics/v-fr-photo1.jpg" /><br /><span style="font-size:10px; padding:0 0 0 5px">D&eacute;tail de l\'annonce</span></a></div>
	<div class="refs">'; if (empty($row['ville'])) { echo '';} else {echo '<p style="text-transform:capitalize;"><b>Ville</b> : ' . $row['ville'] . '.</p>';} 
	echo '</div>
	<div class="refs">
		<p>';
	 
     echo $row["titreFR"];
     
       echo '
		</p>
	</div>
	
	<div class="refs"><p><b>G&icirc;te</b> : <b>'; echo $row['nombre_de_personnes']; echo ' personne(s)</b> - '; echo $row['surface']; echo ' m2 - '; echo $row['nombre_de_pieces']; echo ' pi&egrave;ce(s) - '; echo $row['nombre_de_chambres']; echo ' chambre(s).</p></div>
	<div class="refs"><p><b>'; echo $row['semaine_basse_saison']; echo ' &euro; &agrave; '; echo $row['semaine_tres_haute_saison']; echo ' &euro; par semaine.</b></p></div>
	<div class="refs">';  if (empty($row['ville_alentours'])) {echo '';}
										else { echo '<span style="text-transform:capitalize;">' . $row['ville_alentours'] . ' : ' . $row['d_ville_alentours'] . ' km<span style="text-transform:none;">(s)</span> </span> - ' ;}
						  if (empty($row['prefecture'])) {echo '' ;}
										else { echo '<span style="text-transform:capitalize;">' . $row['prefecture'] . ' : ' . $row['d_prefecture'] . ' km<span style="text-transform:none;">(s)</span> </span>' ;}
						  if (empty($row['d_argeles'])) {echo '';}
										else {echo '<p>Argel&egrave;s sur mer : ' . $row['d_argeles'] . ' km(s) ' . ' - ';}
						  if (empty($row['d_perpignan'])) { echo ''; }
										else { echo 'Perpignan : ' . $row['d_perpignan'] .' km(s) - ';}
  						  if (empty($row['d_andorre'])) { echo ''; }
										else { echo'<br />Andorre : ' . $row['d_andorre'] . ' km(s) - ';}
						  if (empty( $row['d_mer'])) {echo ''; } 
										else { echo 'Mer : ' . $row['d_mer'] . ' km(s)';}
						  if (empty( $row['d_montagne'])) {echo ''; } 
										else {echo ' - Montagne : ' . $row['d_montagne'] . ' km(s).</p>';}
										echo '.</div><div class="refs"><p>&nbsp;</p></div></div>';
    
     }   
 }

 else 
		{
		
 echo '<br /> <br /> <br /> <br /> <div style="margin-left:300px;"><p><b>Vous &ecirc;tes arriv&eacute; &agrave; la fin de la liste des r&eacute;sultats.</b></div></div>';
 
		}

 // on libère le résultat
 mysqli_free_result($req);
	
	?>
	</div> 
	<hr class="separation" />

	<div><ul id="menuNavig">
	<li><< <a id="pagePrecedente" href="<?php if ($page <= 1) { echo '#"'; } else { echo 'hebergements.php?page=' . ($page - '1') . ''; } ?>">Page pr&eacute;c&eacute;dente</a></li>
	<li style="color:#fff;">[</li>
	<?php

$nombreresultat = 8;

// Je récupère le nombre total de données
$sql = "SELECT COUNT(*) AS Annonce_ID FROM `annonces`";
$retour = mysqli_query($connexion,$sql) or die('Erreur SQL !'.$sql.''.mysqli_error($req));
$donnees = $retour->fetch_array();
$totalresult = $donnees['Annonce_ID'];

// Je calcule le nombre de pages à créer
$nombreDePages = ceil($totalresult / $nombreresultat );

// Puis je fais une boucle pour écrire les liens vers chacune des pages

for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
echo '<li><a href="hebergements.php?page=' . $i . '">' . $i . '</a></li> ';
}

if (isset($_GET['page']))
{
$page = $_GET['page'];
}
else
{
$page = 1;
}

$premier_res = ($page - 1) * $nombreresultat ;

?> 
	<li style="color:#fff;">]</li>
	<li><a id="pageSuivante" href="<?php  if ($page >= $nombreDePages) { echo '#"'; } else { echo 'hebergements.php?page=' . ($page + '1') . '';} ?>">Page suivante</a> >></li>
</ul>
</div>    <hr class="separation" />
	<div  <?php if(!$num_rows) { echo 'style="margin-left:350px;"'; } else { echo' style="margin-left:200px;"'; } ?> id="publication">Le contenu des annonces a &eacute;t&eacute; r&eacute;dig&eacute; d'apr&egrave;s les informations transmises et valid&eacute;es par les propri&eacute;taires</div>
   <hr class="separation" />
  <div id="basPage">
  
	<a href="mailto:"></a>&nbsp;&nbsp;-&nbsp;&nbsp;
	<a href="javascript:void(aj_favoris());">AJOUTER AUX FAVORIS</a>&nbsp;&nbsp;-&nbsp;&nbsp;
	<a href="#popMention" class="pop" onmouseup="window.scroll(0,0);">MENTIONS L&Eacute;GALES</a> 
	<br /><br />
	 <a href=""></a>
</div>



<div id="popMention">
	<div id="ligneFermer"><a href="#popMention" class="pop">X</a></div>
	<div class="ligne" style="text-align:center; "><b>MENTIONS L&Eacute;GALES</b></div>

	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>
	<div class="ligne">xxx</div>

</div>
</body>
</html><?php } ?>



Si quelqu'un a une idée je suis preneur.
La page est extrêmement longue alors je ne vous en voudrai pas si vous n'avez pas envie, car moi-même je commence à la trouver rébarbative.
Bonne après-midi.
@ plus.
Fab.

1 réponse

C'est bon,

j'ai modifié

<?php if (isset($_POST['ville'])) {
 
 $sql = "SELECT * FROM `options_gites`,`annonces` WHERE ville='". $_POST['ville'] ."' ORDER BY Annonce_ID ";
 $req = mysqli_query($connexion,$sql) or die('Erreur SQL !'.$sql.''.mysqli_error($sql));
 $donnees = $req->fetch_array();

 // lecture et affichage de titreFR 
     while(	$row = $req->fetch_array())


par

 <?php if (isset($_POST['ville'])) {
 
$ville = htmlentities($_POST['ville']);
$sql = "SELECT * FROM `options_gites` INNER JOIN `annonces` ON opt_gites=Annonce_ID WHERE ville='". $ville."' ORDER BY opt_gites";
$req = mysqli_query($connexion,$sql) or die('Erreur SQL !'.$sql.''.mysqli_error($sql));
$num_rows = mysqli_num_rows($req);

if ($num_rows) {


C'est résolu donc !
0