[PHP - SQL] Recherche dans un catalogue via thème ou mot-clé

Recherche dans un catalogue via thème ou mot-clé [PHP - SQL] - SQL/NoSQL - Programmation

Marsh Posté le 30-05-2005 à 16:08:00    

Bonjour,
 
Voici mon problème. J'essaie de construire un catalogue de livres à partir d'une base de données MySQL. J'aimerais que l'on puisse effectuer une recherche dans ce catalogue via deux critères : le thème du livre (accessible par un menu déroulant) ou un champ de saisie dans lequel on peut rentrer un titre. Par défaut mon menu déroulant affiche la première catégorie de la liste (récupérée ds ma table sql). Je passe donc par un formulaire, configuré en GET.
 
Ma requête ne fonctionne que partiellement : si on sélectionne un thème, on a bien les ouvrages correspondants qui s'affichent. Mais je voudrais que lorsqu'on saisit un mot clé, le thème ne soit plus pris en compte.  
 
Je ne suis pas sûr d'avoir été très clair. Voici donc mon code, peut-être y verrez-vous plus clair et pourrez-vous ainsi m'aider :)
 
Je précise également que je débute, alors soyez indulgent et aiguillez-moi plutôt que me rentrer ds le lard si je suis passé à côté d'un truc évident! Merci :D
 

Code :
  1. <?php
  2. include("../connexion.php" );
  3. //déclaration des variables d'URL
  4. if(isset($_GET['titre']))
  5. $titre=$_GET['titre'];
  6. else $titre="";
  7. if(isset($_GET['rubriqueID']))
  8. $rubriqueID=$_GET['rubriqueID'];
  9. else $rubriqueID="";
  10. //requête de récup des résultats
  11. $catalogue = mysql_query("SELECT * FROM articles WHERE titre='$titre' OR rubriqueID='$rubriqueID'" );
  12. ?>
  13. <body>
  14. <div id="contenu">
  15.   <p>Catalogue client : </p>
  16.   <p><form action="catalogue.php" method="get">
  17. Choisissez un thème <select name="rubriqueID">
  18. <?php
  19. $result = mysql_query("SELECT * FROM rubriques" );
  20. while ($val = mysql_fetch_array($result)) { ?>
  21.       <option value="<? echo $val["0"]; ?>"><? echo $val["1"]; ?></option>
  22.    <? }
  23.    ?>
  24. </select>
  25.   ou saisissez un titre
  26.     <input type="text" name="titre" />
  27.     <input type="submit" name="Submit" value="Afficher" />
  28.   </form></p>
  29. <p>
  30. <?php
  31. //on essaie d'afficher les résultats
  32. while ($catalogue1 = mysql_fetch_array($catalogue))
  33. {
  34. echo $catalogue1['titre'];
  35. ?>
  36. </p>
  37. <?php
  38. }
  39. //mysql_close();
  40. ?>
  41. </body>


Message édité par Onesque le 30-05-2005 à 16:08:39
Reply

Marsh Posté le 30-05-2005 à 16:08:00   

Reply

Marsh Posté le 30-05-2005 à 16:29:16    

essaye plutôt ca :  

Code :
  1. <?php
  2. include("../connexion.php" );
  3. //déclaration des variables d'URL
  4. if(isset($_GET['titre']))
  5. $requete = "SELECT * FROM articles WHERE titre='$titre'";
  6. else if(isset($_GET['rubriqueID']))
  7. $requete = "SELECT * FROM articles WHERE rubriqueID='$rubriqueID'"
  8. //requête de récup des résultats
  9. $catalogue = mysql_query($requete);
  10. /** la suite ... */


 
plutot que de changer le contenu de tes variables en fonction de tes tests pour n'avoir ensuite qu'une seule requête, il vaut mieux construire ta requête en fonction des résultats de tes tests ...
en général en php c plus comme ca que ca fonctionne, sauf quand tu peux vraiment faire une requête générique ...

Reply

Marsh Posté le 30-05-2005 à 17:36:32    

Il m'était pas vraiment venu à l'idée d'adapter la requête en fonction du moyen de sélection choisi :D
 
J'ai dû ajouter un champ vide à mon menu déroulant pour que par défaut ce ne soit pas le premier des thèmes qui soit choisi et maintenant ça fonctionne!
 
Merci pour le coup de pouce, denzz!
 
Maintenant, je vais m'atteler à la recherche sur le titre, pour que si on ne saisit qu'un mot, ou qu'une partie du titre, ca marche quand même.
 
L

Reply

Marsh Posté le 30-05-2005 à 18:01:09    

Bon, ça au moins, ça n'aura pas posé trop de pb : LIKE %'$titre'%
 
Des fois, ça parait simple, et d'autres fois... moins :D

Reply

Sujets relatifs:

Leave a Replay

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