[PHP / MySQL] Moteur de recherche

Moteur de recherche [PHP / MySQL] - PHP - Programmation

Marsh Posté le 29-06-2006 à 17:55:03    

Bonjour, je dois mettre en place sur mon site d'annonces immobilières un moteur de recherche.
J'ai créé le formulaire de recherche:
 

Code :
  1. <form name="recherche_rapide" id="recherche_rapide" method="post" action="result_recherche_rapide.php">
  2. <div id="corps_form_recherche_rapide">
  3. <table width="620" border="0" align="center" cellpadding="0" cellspacing="0">
  4. <tr>
  5. <td height="30" colspan="2"></td>
  6. <td height="30" colspan="2"></td>
  7. </tr>
  8. <tr>
  9. <td>Je souhaite:</td>
  10. <td><select name="type_recherche"><option value="acheter">Acheter</option><option value="louer">Louer</option></select></td>
  11. <td>Prix mini:</td>
  12. <td><input type="text" name="prix_mini" /> €</td>
  13. </tr>
  14. <tr>
  15. <td>Type de bien:</td>
  16. <td><select name="type_bien"><option value="pas_important">Pas important</option><option value="appartement">Appartement</option><option value="maison">Maison</option><option value="terrain">Terrain</option><option value="immeuble">Immeuble</option><option value="local">Local</option><option value="commerce">Commerce</option><option value="parking">Parking</option></select></td>
  17. <td>Prix maxi:</label></td>
  18. <td><input type="text" name="prix_maxi" /> €</td>
  19. </tr>
  20. <tr>
  21. <td>Secteur(s):</td>
  22. <td><select name="secteurs"><option value="cne">Carcassonne & hameaux</option><option value="ne">Minervois</option><option value="se">Corbières / Haute Vallée</option><option value="no">Cabardès / Montagne Noire</option><option value="so">Razès / Haute Vallée</option><option value="littoral">Littoral</option><option value="limitrophes">Départements limitrophes</option></select></td>
  23. <td>Nbre de pièces:</td>
  24. <td><select name="nbre_pieces" /><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6plus">6 et plus</option></select></td>
  25. </tr>
  26. <tr>
  27. <td>Référence:</td>
  28. <td><input type="text" name="reference" /></td>
  29. </tr>
  30. <tr>
  31. <td><input type="reset" name="reset" id="reset" value="Effacer" tabindex="70" /> <input type="hidden" name="action" value="submitted" /> <input type="submit" name="valider" id="valider" value="Lancer la recherche" tabindex="80" /></td>
  32. <tr>
  33. </table>
  34. </form>


 
 
Voici mon fichier "result_recherche_rapide.php" qui me permet de traîter le formulaire:
 

Code :
  1. <?php
  2. // Informations pour la connexion à la BDD
  3. $host = '****';
  4. $user = '****';
  5. $pass = '****';
  6. $db = '****';
  7. // Connnexion à la BDD
  8. $link = mysql_connect ($host,$user,$pass) or die ('Erreur :'.mysql_error());
  9. mysql_select_db($db) or die ('Erreur :'.mysql_error());
  10. $souhait = $_POST['type_recherche'];
  11. $prix_mini = $_POST['prix_mini'];
  12. $prix_maxi = $_POST['prix_maxi'];
  13. $type_bien = $_POST['type_bien'];
  14. $secteur = $_POST['secteur'];
  15. $nbre_pieces = $_POST['nbre_pieces'];
  16. $reference = $_POST['reference'];
  17. if ($secteur == 'cne') {
  18. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '1' AND t_maison.idx_secteur = '2' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  19. }
  20. elseif ($secteur == 'ne') {
  21. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '6' AND t_maison.idx_secteur = '7' AND t_maison.idx_secteur = '9' AND t_maison.idx_secteur = '10' AND t_maison.idx_secteur = '11' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  22. }
  23. elseif ($secteur == 'se') {
  24. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '13' AND t_maison.idx_secteur = '14' AND t_maison.idx_secteur = '16' AND t_maison.idx_secteur = '17' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  25. }
  26. elseif ($secteur == 'no') {
  27. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '19' AND t_maison.idx_secteur = '20' AND t_maison.idx_secteur = '21' AND t_maison.idx_secteur = '22' AND t_maison.idx_secteur = '23' AND t_maison.idx_secteur = '24' AND t_maison.idx_secteur = '26' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  28. }
  29. elseif ($secteur == 'so') {
  30. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '28' AND t_maison.idx_secteur = '29' AND t_maison.idx_secteur = '30' AND t_maison.idx_secteur = '31' AND t_maison.idx_secteur = '32' AND t_maison.idx_secteur = '33' AND t_maison.idx_secteur = '34' AND t_maison.idx_secteur = '35' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  31. }
  32. elseif ($secteur == 'littoral') {
  33. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '3' AND t_maison.idx_secteur = '4' AND t_maison.idx_secteur = '5' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  34. }
  35. else ($secteur == 'limitrophes') {
  36. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '8' AND t_maison.idx_secteur = '12' AND t_maison.idx_secteur = '15' AND t_maison.idx_secteur = '18' AND t_maison.idx_secteur = '25' AND t_maison.idx_secteur = '27' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  37. }
  38. while ($donnees = mysql_fetch_array($reponse) )
  39. {
  40. ?>
  41. <table>
  42. <tr>
  43. <td>
  44. <p><a href="detail_appart.php?id=<?php echo $donnees['no_asp']; ?>"><img src="<?php echo $donnees['photo1']; ?>" alt="Photo" /></a></p>
  45. </td>
  46. <td width="390">
  47. Référence: <?php echo $donnees['no_asp']; ?><br />
  48. Catégorie: <?php echo $donnees['categorie']; ?><br />
  49. Localisation: <?php echo $donnees['ville_internet']; ?><br />
  50. Surface habitable: <?php echo $donnees['surf_hab']; ?> m²
  51. Surface terrain: <?php echo $donnees['surf_terrain']; ?> m²<br />
  52. Nombre de pièces: <?php echo $donnees['nb_chambres']; ?><br />
  53. Prix: <?php echo $donnees['prix']; ?> €<br />
  54. </td>
  55. <td>
  56. </td>
  57. </tr>
  58. </table>
  59. <?php
  60. }
  61. mysql_close(); // Déconnexion de MySQL
  62. ?>


 
 
La requete renvoie une page blanche.
 
Je voudrai également savoir comment faire si des champs ne sont pas renseignés et pour faire une sélection sur plusieurs secteurs par exemple.
 
C'est assez délicat à expliquer, désolé si je n'ai pas été trop clair.
 
Merci par avance pour votre aide.


Message édité par Ben-o le 30-06-2006 à 08:44:10
Reply

Marsh Posté le 29-06-2006 à 17:55:03   

Reply

Marsh Posté le 29-06-2006 à 20:30:09    

J'ai pas regardé en détail mais déjà j'ai vu ça  
 

Code :
  1. <td">Type de bien:</td>

Tu as un " qui ne devrait pas apparaître  :non:  
 
Je materai le reste plus en détail

Reply

Marsh Posté le 30-06-2006 à 08:43:28    

Merci guitou, mais j'ai fait cette erreur en recopiant le code.
 
[edit] Je l'ai corrigé [/edit]


Message édité par Ben-o le 30-06-2006 à 08:44:42
Reply

Marsh Posté le 30-06-2006 à 08:55:58    

Pour faire une requete sur plusieurs champs, le mieu c'est que tu te fasses une petite methode à laquelle tu passe un array avec tous les champs que tu veux tester, et que cette methode te construise la requete et te la retourne ...
Parcontre fait un peu d'effort pour le html ... En est au 21ème siecle quand meme :heink:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 30-06-2006 à 09:07:58    

Merci pour ta réponse esox_ch, j'ai épuré le html au maximum pour faciliter la lecture  :)  
Peux-tu me donner une piste supplémentaire pour la mise en place de cette methode avec array?
Encore merci.

Reply

Marsh Posté le 30-06-2006 à 09:26:18    

Je te propose des petites modifications sur ton code pour une meilleure lisibilité ainsi qu'une petite erreur (pe de frappe ?) que j'ai vu
 

Code :
  1. <?php
  2. // Informations pour la connexion à la BDD
  3. $host = '****';
  4. $user = '****';
  5. $pass = '****';
  6. $db = '****';
  7. // Connnexion à la BDD
  8. $link = mysql_connect ($host,$user,$pass) or die ('Erreur :'.mysql_error());
  9. mysql_select_db($db) or die ('Erreur :'.mysql_error());
  10. $souhait = $_POST['type_recherche'];
  11. $prix_mini = $_POST['prix_mini'];
  12. $prix_maxi = $_POST['prix_maxi'];
  13. $type_bien = $_POST['type_bien'];
  14. $secteur = $_POST['secteur'];
  15. $nbre_pieces = $_POST['nbre_pieces'];
  16. $reference = $_POST['reference'];
  17. $query = "SELECT
  18. photo1,
  19. type,
  20. secteur,
  21. categorie,
  22. no_asp,
  23. prix,
  24. cp_internet,
  25. ville_internet,
  26. nb_chambres,
  27. surf_hab,
  28. surf_terrain
  29. FROM t_type, t_secteur, t_maison, t_categorie
  30. WHERE t_type.type = ".$type_bien."
  31. AND t_maison.idx_type_offre = t_type.id_type_offre
  32. AND t_maison.nbre_pieces = ".$nbre_pieces."
  33. AND t_maison.no_asp = ".$reference."
  34. AND t_maison.prix >= ".$prix_mini."
  35. AND t_maison.prix <= ".$prix_maxi;
  36. if ($secteur == 'cne') {
  37. $secteur = " AND t_maison.idx_secteur = '1' AND t_maison.idx_secteur = '2'";
  38. }
  39. elseif ($secteur == 'ne') {
  40. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '6' AND t_maison.idx_secteur = '7' AND t_maison.idx_secteur = '9' AND t_maison.idx_secteur = '10' AND t_maison.idx_secteur = '11' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  41. }
  42. elseif ($secteur == 'se')
  43. {
  44. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '13' AND t_maison.idx_secteur = '14' AND t_maison.idx_secteur = '16' AND t_maison.idx_secteur = '17' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  45. }
  46. elseif ($secteur == 'no')
  47. {
  48. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '19' AND t_maison.idx_secteur = '20' AND t_maison.idx_secteur = '21' AND t_maison.idx_secteur = '22' AND t_maison.idx_secteur = '23' AND t_maison.idx_secteur = '24' AND t_maison.idx_secteur = '26' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  49. }
  50. elseif ($secteur == 'so')
  51. {
  52. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '28' AND t_maison.idx_secteur = '29' AND t_maison.idx_secteur = '30' AND t_maison.idx_secteur = '31' AND t_maison.idx_secteur = '32' AND t_maison.idx_secteur = '33' AND t_maison.idx_secteur = '34' AND t_maison.idx_secteur = '35' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  53. }
  54. elseif ($secteur == 'littoral')
  55. {
  56. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '3' AND t_maison.idx_secteur = '4' AND t_maison.idx_secteur = '5' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  57. }
  58. elseif ($secteur == 'limitrophes')
  59. {
  60. $reponse = mysql_query("SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.idx_secteur = '8' AND t_maison.idx_secteur = '12' AND t_maison.idx_secteur = '15' AND t_maison.idx_secteur = '18' AND t_maison.idx_secteur = '25' AND t_maison.idx_secteur = '27' AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi."" );
  61. }
  62. $query_final = $query.$secteur; echo $query_final; // Ptite vérif ici
  63. $reponse = mysql_query($query_final);   
  64. while ($donnees = mysql_fetch_array($reponse) )
  65. {
  66. ?>
  67. <table>
  68. <tr>
  69. <td>
  70. <p><a href="detail_appart.php?id=<?php echo $donnees['no_asp']; ?>"><img src="<?php echo $donnees['photo1']; ?>" alt="Photo" /></a></p>
  71. </td>
  72. <td width="390">
  73. Référence: <?php echo $donnees['no_asp']; ?><br />
  74. Catégorie: <?php echo $donnees['categorie']; ?><br />
  75. Localisation: <?php echo $donnees['ville_internet']; ?><br />
  76. Surface habitable: <?php echo $donnees['surf_hab']; ?> m²
  77. Surface terrain: <?php echo $donnees['surf_terrain']; ?> m²<br />
  78. Nombre de pièces: <?php echo $donnees['nb_chambres']; ?><br />
  79. Prix: <?php echo $donnees['prix']; ?> €<br />
  80. </td>
  81. <td>
  82. </td>
  83. </tr>
  84. </table>
  85. <?php
  86. }
  87. mysql_close(); // Déconnexion de MySQL
  88. ?>


 
Il manquait un dernier IF apres ton dernier else (ton erreur vient ptet de là)
 
Ensuite vu que tes requêtes à part 2/3 params sont identiques (à moins que j'ai mal luà il est inutile de les réécrire 40 fois, parceque si tu changes un nom de champ tu es obligé de le modifier partout etc etc
 
Donc la en fait il suffit de modifier les seuls paramètres qui changent (à savoir les secteurs) et de le concaténer à la fin de ta requête (je l'ai fait pour le 1er if je te laisse faire la suite  ;) )

Reply

Marsh Posté le 30-06-2006 à 09:30:07    

Perso je trouve cette liste de if / elseif ... super indigeste ...
Perso j'ai une methode qui contient un array avec la liste des champs disponibles dans la bdd, ensuite, tu passes un array avec tous les champs sur lesquels le tri est possible (tu les recup du $_POST et tu fais les checks de secu dessus), et la methode prend 1 a 1 les champs sur lesquels elle est autorisée a faire le tri (pour des raisons de secu) et si la valeur dans l'array n'est pas vide elle l'insere dans la requete.
 
Voili voila :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 30-06-2006 à 09:45:33    

Merci à vous, je vais essayer de faire avec la réponse de guitou, je ne comprends pas bien comment mettre en place la méthode de esox_ch.

Reply

Marsh Posté le 30-06-2006 à 10:03:25    

Bosse un peu le PHP orienté objet et après ça va te paraitre clair comme de l'eau de roche


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 30-06-2006 à 10:12:28    

J'aimerai vraiment maitriser tout ça un peu plus, c'est vrai que je fais avec des bouts de ficèle, mais j'avoue que c'est relativement compliqué à assimiler.

Reply

Marsh Posté le 30-06-2006 à 10:12:28   

Reply

Marsh Posté le 30-06-2006 à 10:18:30    

Ben-o a écrit :

J'aimerai vraiment maitriser tout ça un peu plus, c'est vrai que je fais avec des bouts de ficèle, mais j'avoue que c'est relativement compliqué à assimiler.


 
Ca viendra avec le temps  ;)  
 
Pense à mettre ton code un jour une fois que tu auras avancé qu'on puisse voir ce qui cloche encore   :pt1cable:

Reply

Marsh Posté le 30-06-2006 à 10:24:50    

J'ai donc fait comme tu m'as dit, mais j'affiche encore une page blanche...  :(  
 
il y a peut être un problème avec cette ligne??
 

Code :
  1. $query = "SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi;""

Reply

Marsh Posté le 30-06-2006 à 10:29:44    

Ben-o a écrit :

J'ai donc fait comme tu m'as dit, mais j'affiche encore une page blanche...  :(  
 
il y a peut être un problème avec cette ligne??
 

Code :
  1. $query = "SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi;""



 
Tu as une page blanche ? même pas l'affichage de la requête qui va être passée à la base avec le "echo $query_final" ?
Si non c'est que le souci est ailleurs.....  
 
Poste ton nouveau code pour voir...

Reply

Marsh Posté le 30-06-2006 à 10:36:54    

Voici mon code complet:
 

Code :
  1. <?php
  2.     // Informations pour la connexion à la BDD
  3.     $host = '****';
  4.     $user = '****';
  5.     $pass = '****';
  6.     $db = '****';
  7.     // Connexion à la BDD
  8.     $link = mysql_connect ($host,$user,$pass) or die ('Erreur :'.mysql_error());
  9.     mysql_select_db($db) or die ('Erreur :'.mysql_error());
  10.     $souhait = $_POST['type_recherche'];
  11.     $prix_mini = $_POST['prix_mini'];
  12.     $prix_maxi = $_POST['prix_maxi'];
  13.     $type_bien = $_POST['type_bien'];
  14.     $secteur = $_POST['secteur'];
  15.     $nbre_pieces = $_POST['nbre_pieces'];
  16.     $reference = $_POST['reference'];
  17.     $query = "SELECT photo1, type, secteur, categorie, no_asp, prix, cp_internet, ville_internet, nb_chambres, surf_hab, surf_terrain FROM t_type, t_secteur, t_maison, t_categorie WHERE t_type.type = ".$type_bien." AND t_maison.idx_type_offre = t_type.id_type_offre AND t_maison.nbre_pieces = ".$nbre_pieces." AND t_maison.no_asp = ".$reference." AND t_maison.prix >= ".$prix_mini." AND t_maison.prix <= ".$prix_maxi;""
  18.     if ($secteur == 'cne') {
  19.      $secteur = " AND t_maison.idx_secteur = '1' AND t_maison.idx_secteur = '2'";
  20.     }
  21.     elseif ($secteur == 'ne') {
  22.      $secteur = " AND t_maison.idx_secteur = '6' AND t_maison.idx_secteur = '7' AND t_maison.idx_secteur = '9' AND t_maison.idx_secteur = '10' AND t_maison.idx_secteur = '11'";
  23.     }
  24.     elseif ($secteur == 'se') {
  25.      $secteur = " AND t_maison.idx_secteur = '13' AND t_maison.idx_secteur = '14' AND t_maison.idx_secteur = '16' AND t_maison.idx_secteur = '17'";
  26.     }
  27.     elseif ($secteur == 'no') {
  28.      $secteur = " AND t_maison.idx_secteur = '19' AND t_maison.idx_secteur = '20' AND t_maison.idx_secteur = '21' AND t_maison.idx_secteur = '22' AND t_maison.idx_secteur = '23' AND t_maison.idx_secteur = '24' AND t_maison.idx_secteur = '26'";
  29.     }
  30.     elseif ($secteur == 'so') {
  31.      $secteur = " AND t_maison.idx_secteur = '28' AND t_maison.idx_secteur = '29' AND t_maison.idx_secteur = '30' AND t_maison.idx_secteur = '31' AND t_maison.idx_secteur = '32' AND t_maison.idx_secteur = '33' AND t_maison.idx_secteur = '34' AND t_maison.idx_secteur = '35'";
  32.     }
  33.     elseif ($secteur == 'littoral') {
  34.      $secteur = " AND t_maison.idx_secteur = '3' AND t_maison.idx_secteur = '4' AND t_maison.idx_secteur = '5'";
  35.     }
  36.     elseif ($secteur == 'limitrophes') {
  37.      $secteur = " AND t_maison.idx_secteur = '8' AND t_maison.idx_secteur = '12' AND t_maison.idx_secteur = '15' AND t_maison.idx_secteur = '18' AND t_maison.idx_secteur = '25' AND t_maison.idx_secteur = '27'";
  38.     }
  39.     $query_final = $query.$secteur;
  40.     echo $query_final; // Ptite vérif ici
  41.     $reponse = mysql_query($query_final);   
  42.     while ($donnees = mysql_fetch_array($reponse) )
  43.     {
  44.    ?>
  45.     <table width="620" align="center" cellpadding="0" cellspacing="0">
  46.      <tr>
  47.       <td width="130">
  48.        <p><a href="detail_appart.php?id=<?php echo $donnees['no_asp']; ?>"><img src="<?php echo $donnees['photo1']; ?>" height="90%" width="90%" alt="Photo" /></a></p>
  49.       </td>
  50.       <td width="390">
  51.        <span class="intitule_tab_result">Référence:</span> <span class="valeur_tab_result"><?php echo $donnees['no_asp']; ?></span><br />
  52.        <span class="intitule_tab_result">Catégorie:</span> <span class="valeur_tab_result"><?php echo $donnees['categorie']; ?></span><br />
  53.        <span class="intitule_tab_result">Localisation:</span> <span class="valeur_tab_result"><?php echo $donnees['ville_internet']; ?></span><br />
  54.        <span class="intitule_tab_result">Surface habitable:</span> <span class="valeur_tab_result"><?php echo $donnees['surf_hab']; ?> m²</span> <span class="intitule_tab_result">Surface terrain:</span> <span class="valeur_tab_result"><?php echo $donnees['surf_terrain']; ?> m²</span><br />
  55.        <span class="intitule_tab_result">Nombre de chambres:</span> <span class="valeur_tab_result"><?php echo $donnees['nb_chambres']; ?></span>
  56.       </td>
  57.       <td width="100">
  58.        <span class="intitule_tab_result">Prix:</span> <span class="valeur_tab_result"><?php echo $donnees['prix']; ?> €</span><br />
  59.        <p><em><font color="#FF8A00"><a href="detail_appart.php?id=<?php echo $donnees['no_asp']; ?>">+ de détails</a></font></em></p>
  60.       </td>
  61.      </tr>
  62.     </table><br />
  63.    <?php
  64.     }
  65.     mysql_close(); // Déconnexion de MySQL
  66.    ?>

Reply

Marsh Posté le 30-06-2006 à 10:42:10    

Ca te plaisait pas ma présentation des requêtes en colonnes parceque scroller 30kms pour lire la requête c pas super pratique.  :non:  
 
Alors tu as toujours la page blanche ou tu arrives à voir la requête qui va être envoyée. Et si tu la vois est tu sur qu'elle va te renvoyer un résultat ? (si tu l'exécutes dans PhpMyAdmin par ex...)
 
EDIT :Quel con j'ai pas fait gaffe mais j'écrase ta variable $secteur avec les paramètres, il faut donc changer le nom...


Message édité par guitou12 le 30-06-2006 à 10:44:17
Reply

Marsh Posté le 30-06-2006 à 10:45:36    

oki pinaise, j'essaye en changeant le nom
 
[edit] Désolé pour le scroll  [/edit]


Message édité par Ben-o le 30-06-2006 à 10:46:18
Reply

Marsh Posté le 30-06-2006 à 11:05:35    

Toujours une page blanche pinaise...   :sweat:  
J'ai donc changé les noms de $secteur en $secteur_general:
 

Code :
  1. $query = "SELECT
  2. photo1,
  3. type,
  4. secteur,
  5. categorie,
  6. no_asp,
  7. prix,
  8. cp_internet,
  9. ville_internet,
  10. nb_chambres,
  11. surf_hab,
  12. surf_terrain
  13. FROM t_type,
  14. t_secteur,
  15. t_maison,
  16. t_categorie
  17. WHERE
  18. t_type.type = ".$type_bien."
  19. AND t_maison.idx_type_offre = t_type.id_type_offre
  20. AND t_maison.nbre_pieces = ".$nbre_pieces."
  21. AND t_maison.no_asp = ".$reference."
  22. AND t_maison.prix >= ".$prix_mini."
  23. AND t_maison.prix <= ".$prix_maxi;""
  24. if ($secteur == 'cne') {
  25. $secteur_general = " AND t_maison.idx_secteur = '1' AND t_maison.idx_secteur = '2'";
  26. }
  27. elseif ($secteur == 'ne') {
  28. $secteur_general = " AND t_maison.idx_secteur = '6' AND t_maison.idx_secteur = '7' AND t_maison.idx_secteur = '9' AND t_maison.idx_secteur = '10' AND t_maison.idx_secteur = '11'";
  29. }
  30. elseif ($secteur == 'se') {
  31. $secteur_general = " AND t_maison.idx_secteur = '13' AND t_maison.idx_secteur = '14' AND t_maison.idx_secteur = '16' AND t_maison.idx_secteur = '17'";
  32. }
  33. elseif ($secteur == 'no') {
  34. $secteur_general = " AND t_maison.idx_secteur = '19' AND t_maison.idx_secteur = '20' AND t_maison.idx_secteur = '21' AND t_maison.idx_secteur = '22' AND t_maison.idx_secteur = '23' AND t_maison.idx_secteur = '24' AND t_maison.idx_secteur = '26'";
  35. }
  36.     elseif ($secteur == 'so') {
  37.      $secteur_general = " AND t_maison.idx_secteur = '28' AND t_maison.idx_secteur = '29' AND t_maison.idx_secteur = '30' AND t_maison.idx_secteur = '31' AND t_maison.idx_secteur = '32' AND t_maison.idx_secteur = '33' AND t_maison.idx_secteur = '34' AND t_maison.idx_secteur = '35'";
  38.     }
  39. elseif ($secteur == 'littoral') {
  40. $secteur_general = " AND t_maison.idx_secteur = '3' AND t_maison.idx_secteur = '4' AND t_maison.idx_secteur = '5'";
  41. }
  42. elseif ($secteur == 'limitrophes') {
  43. $secteur_general = " AND t_maison.idx_secteur = '8' AND t_maison.idx_secteur = '12' AND t_maison.idx_secteur = '15' AND t_maison.idx_secteur = '18' AND t_maison.idx_secteur = '25' AND t_maison.idx_secteur = '27'";
  44. }
  45. $query_final = $query.$secteur_general;
  46. echo $query_final; // Ptite vérif ici
  47. $reponse = mysql_query($query_final);
  48. while ($donnees = mysql_fetch_array($reponse) )
  49. {


 
J'ai vu qu'on avait également la possibilité de faire des requetes sur plusieurs tables en utilisant "LIKE", ne faudrait-il pas utiliser ça?

Reply

Marsh Posté le 30-06-2006 à 11:17:33    

Le LIKE n'est pas un mot réservé pour faire des requêtes sur plusieurs tables mais plutot pour faire des test sur un champ ressemblant à
C'est pas super bien expliqué comme ça mais ca ira mieux avec un exemple
 
SELECT * FROM matable WHERE type='immeuble' AND codepostal LIKE '83%'
 
Le LIKE employé avec % va chercher les valeurs avec ta chaine et n'importe quoi (en gros c'est comme * sous windows)
Au dessus c'est le code postal qui pourra etre 83000 83230 etc etc
 
Enfin tout ça ca résoud pas ton pb... aurais tu moyen de me mailer tes 2 pages + quelques entrées de la base que je teste ça au taff ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed