Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1122 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP / MySQL] Moteur de recherche

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP / MySQL] Moteur de recherche

n°1397373
Ben-o
Posté le 29-06-2006 à 17:55:03  profilanswer
 

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
mood
Publicité
Posté le 29-06-2006 à 17:55:03  profilanswer
 

n°1397445
guitou12
Dev php à mi-temps :D
Posté le 29-06-2006 à 20:30:09  profilanswer
 

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

n°1397674
Ben-o
Posté le 30-06-2006 à 08:43:28  profilanswer
 

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
n°1397676
esox_ch
Posté le 30-06-2006 à 08:55:58  profilanswer
 

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
n°1397683
Ben-o
Posté le 30-06-2006 à 09:07:58  profilanswer
 

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.

n°1397710
guitou12
Dev php à mi-temps :D
Posté le 30-06-2006 à 09:26:18  profilanswer
 

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  ;) )

n°1397716
esox_ch
Posté le 30-06-2006 à 09:30:07  profilanswer
 

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
n°1397734
Ben-o
Posté le 30-06-2006 à 09:45:33  profilanswer
 

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.

n°1397748
esox_ch
Posté le 30-06-2006 à 10:03:25  profilanswer
 

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
n°1397761
Ben-o
Posté le 30-06-2006 à 10:12:28  profilanswer
 

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.

mood
Publicité
Posté le 30-06-2006 à 10:12:28  profilanswer
 

n°1397771
guitou12
Dev php à mi-temps :D
Posté le 30-06-2006 à 10:18:30  profilanswer
 

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:

n°1397777
Ben-o
Posté le 30-06-2006 à 10:24:50  profilanswer
 

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;""

n°1397781
guitou12
Dev php à mi-temps :D
Posté le 30-06-2006 à 10:29:44  profilanswer
 

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...

n°1397788
Ben-o
Posté le 30-06-2006 à 10:36:54  profilanswer
 

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.    ?>

n°1397789
guitou12
Dev php à mi-temps :D
Posté le 30-06-2006 à 10:42:10  profilanswer
 

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
n°1397795
Ben-o
Posté le 30-06-2006 à 10:45:36  profilanswer
 

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
n°1397829
Ben-o
Posté le 30-06-2006 à 11:05:35  profilanswer
 

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?

n°1397849
guitou12
Dev php à mi-temps :D
Posté le 30-06-2006 à 11:17:33  profilanswer
 

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 ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP / MySQL] Moteur de recherche

 

Sujets relatifs
Accents/Points d'interrogation en PHP/MySqlErreur PHP dans l'explorer de JBC
[PHP/Javascript] PB lors de l'affichage de caractère dans une pageConnexion à MySQL
base de données MYSQL avec champs verticauxMySQL - sélectionner le premier enregistrement d'une table
version client mysql utilisé par PHPProbleme de requete MySQL avec des controles CASE
[ PHP/ MySQL ] Réaliser un moteur de recherche interne...[PHP] [mySQL] moteur de recherche
Plus de sujets relatifs à : [PHP / MySQL] Moteur de recherche


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR