> Tous les forums > Forum des Webmasters
 Pb dans mon petit moteur de recherche (php+mysql)Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
sotomayor01
  Posté le 25/03/2006 @ 14:15 
Aller en bas de la page 
Petit astucien
Bonjour à toutes et à tous, Voila, j'ai commencé à coder un petit moteur de recherche pour des enregistrements se trouvant dans ma bdd ([url]http://jump.and.feel.free.fr/index.php?p=19[/url]) Ce que je n'arrive pas à faire, c'est à selectionner tous les enregistrements de la table si rien n'est choisi pour un des critère (exemple : si le champ "nationalité" reste vide, sélectionner toutes les nationalitées possibles.). Pour le moment, il y a des resultats pour une recherche si et seulement si tous les criteres sont respectés... Si quelqu'un saurait me depanner, ca serait cool !! (PS : la requete Sql est visible sur la page des résultats, pour aider !) Merci d'avance !
Publicité
koala01
 Posté le 25/03/2006 à 18:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Salut, Ce que tu peux déjà facilement faire, c'est "simplement" tester la longueur de la chaine du champs dans lequel le visiteur doit introduire les mots à rechercher… En gros, si tu dispose d'une variable $recherche qui récupère le mot à chercher, il "suffit" d'un [code] <? if (len($cherche)==0 { $sql="select * from table"; } else { $sql=sprintf("select * from table where champs like "%s",$cherche); } $cherche=mysql_query($sql, $connection); … [/code]
sotomayor01
 Posté le 25/03/2006 à 19:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Bonsoir Koala01 [hello] En fait, mon moteur de recherche ne contient pas de champ texte, mais que des menus deroulants, remplis grace à ma base de données ! Et le probleme viens du fait, que je ne sais coment coder la requete si pour un certain champ (nationalité par exemple), le visiteur n'émet aucun choix. Dans ce cas, je voudrais que toutes les nationalitées soit sélectionnées... En d'autres termes, existe-t-il un moyen pour que la requete se formule ainsi : SELECT * FROM machin WHERE nationalite = "TOUTES LES NATIONALITES" AND sexe =.......... Plus clair là ?
koala01
 Posté le 25/03/2006 à 21:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Ben, dans ce cas, tu supprimes simplement le critère de ta clause "where"… Si tu crées une requete du genre de "select * from table where nationnalite='machin' and truc='brol' and bidule='basard'", et que tu souhaite qu'une requete soit prise en compte sans vérifier la nationnalité, il suffit de supprimer le "nationnalite='machin' de la requete… En gros, dans un cas pareil, l'une des possiblités est de tester chaque champs de sélection possible, selon un principe du genre de [code]<? //une variable temporaire pour travailler $tempo=""; //on teste si le visiteur a sélectionné une nationnalite if ($nat!="") { //si c'est le cas, on rajoute la nationnalité (comme c'est la première, on peut inclure la clause where) $tempo="where nationnalite='$nat'"; } //s'il n'y a rien, ici, on peut ne rien faire ;-) //on teste si le visiteur a sélectionné une valeur pour truc if($truc!="") { //deux solution possibles: soit on avait une nationnalité, soit on n'en avait pas //il faut le tester if($tempo!="") { //si c'est le cas, il faut rajouter le terme "and" et le critère $tempo+=" and truc='$truc'"; } else { //sinon, il faut rajouter la clause "where", et le critere $tempo="where truc='$truc'"; } } //on teste enfin s'il faut rajouter un critere bidule (et on travaille de la meme manière if($bid!="") { if($tempo!="") { $tempo+=" and bidule='$bid'"; } else { $tempo="where bidule='$bid'"; } } //on peut rajouter autant de critère que l'on peut en souhaiter ;-) //une fois qu'on a testé l'ajout de tous les critères, il ne reste "plus" qu'à rajouter la variable temporaire //à une requete SQL $sql="select * from table $tempo"; //et à l'effectuer ?> [/code] Evidemment, $truc, $bid et $nat sont les noms des variables dans lesquelles tu auras récupéré les valeurs sélectionnées dans tes différents menus déroulants [clindoeil] Penses, le cas échéant, à vérifier si ces valeurs sont cohérentes [clindoeil]
sotomayor01
 Posté le 26/03/2006 à 00:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Bon, après avoir mis la main à la pate (ou plutot au code), j'ai adapté ca à mes 5 menus deroulant du moteur de recherche... En fait, je ne savais pas coment rajouter des données à une variable déjà etablie, c'est chose faite avec $variable+, merci ! Maintenant, il reste un petit problème : lorsque plusieurs paramètres devraient etre mis bout à bout, la requete devient : SELECT * FROM table 0 [confus][confus][confus] Je ne vois pas d'ou vient ce fichu 0, mais je continue à chercher... (Au cas où, voilà le code : [code]//une variable temporaire pour travailler $tempo=""; //on teste si le visiteur a sélectionné un nom if ($nom!="") { //si c'est le cas, on rajoute le nom (comme c'est la première, on peut inclure la clause where) $tempo="WHERE nom = '$nom'"; } //on teste si le visiteur a sélectionné une valeur pour truc if($sexe!="") { //On teste si on a une nationnalité ou pas : if($tempo!="") { //si c'est le cas, il faut rajouter le terme "and" et le critère $tempo+=" AND sexe = '$sexe'"; } else { //sinon, il faut rajouter la clause "where", et le critere $tempo="WHERE sexe = '$sexe'"; } } //de meme pour la suite if($nationalite!="") { if($tempo!="") { $tempo+=" AND nationalite = '$nationalite'"; } else { $tempo="WHERE nationalite = '$nationalite'"; } } if($technique!="") { if($tempo!="") { $tempo+=" AND technique = '$technique'"; } else { $tempo="WHERE technique = '$technique'"; } } if($competition!="") { if($tempo!="") { $tempo+=" AND competition = '$competition'"; } else { $tempo="WHERE competition = '$competition'"; } } //une fois qu'on a testé l'ajout de tous les critères, on rajoute $tempo à une requete SQL $sql="SELECT * FROM vidz $tempo";[/code] )

Modifié par sotomayor01 le 26/03/2006 00:06
koala01
 Posté le 26/03/2006 à 00:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Autant pour moi… En fait, ce n'est pas $tempo+= qu'il faut utiliser, mais $tempo.= (le "." servant à la concaténation de chaines) Il s'agit donc, pour chaque ligne à laquelle tu trouves $tempo+= de remplacer le + par un . [clindoeil] Il m'arrive régulièrement de confondre différents langages, n'espère que tu ne m'en voudra pas [clindoeil]
sotomayor01
 Posté le 26/03/2006 à 00:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Hum alors, prenant en compte le fait que tu m'a appris 90% de ce que je sais sur Mr Php, et que je ne t'ai, pour l'instant, pas payé les heures passées à m'aider, je vais dire que je ne t'en tiens pas trop rigueur pour cette fois ci [bigsmile][bigsmile]!!! Un grand merci Koala01, ca donne les resultats escomptés maintenant ! Bonne nuit, et n'oublie pas de changer d'heure [clindoeil]
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
99,99 €Enceinte JBL Charge 3 (sans fil bluetooth rechargeable / powerbank 6000 mAh) à 99,99 €
139,99 € -29%

Amazon fait une promotion sur l'enceinte sans fil bluetooth rechargeable JBL Charge 3 99,99 €. On la trouve ailleurs à partir de 139,99 €.

Connectez sans fil votre ordinateur, votre tablette ou votre smartphone et écoutez votre musique en stéréo avec le son JBL ample et riche avec des graves puissantes. Son micro intégré vous permettra également de répondre aux appels téléphoniques. Sa batterie de 6000 mAh intégrée offre une autonomie de 20h et permet de recharger vos appareils mobiles.

Elle est étanche IPX7.


Voir l'offre
179,00 €Ecran PC 24.5 pouces BenQ EX2510S (FHD, IPS, FreeSync,165Hz, 2xHP, réglable en hauteur) à 179 €
249 € -28%

Amazon fait une belle promotion sur l'écran PC BenQ MOBIUZ EX2510S qui passe 179 € livré gratuitement alors qu'on le trouve ailleurs à partir de 249 €. Il possède une dalle de 24.5 pouces Full HD IPS et offre une fréquence de rafraichissement de 165 Hz et un temps de réponse de 1 ms. Il intègre 2 HP (2.5W) et une connectivité HDMI et DP. Il est réglable en hauteur.


Voir l'offre
169,99 €Système de sécurité Amazon Ring Alarm Kit 5 pièces à 169,99 €
250 € -32%

Amazon fait une promotion sur le système de sécurité Amazon Ring Alarm Kit 5 pièces (2ème génération) à 169,99 € au lieu de 250 €. Ce kit inclut tout ce qu'il vous faut pour démarrer : une base, un pavé numérique, un capteur de contact, un détecteur de mouvements, un amplificateur de portée et une caméra Ring Indoor Cam.


Voir l'offre
5,83 €300 sacs à déjections canines avec distributeur et clip pour laisse à 5,83 €
7 € -17%

Amazon fait une promotion sur le lot de 300 sacs à déjections canines de sa marque Amazon Basics avec distributeur et clip pour laisse à 5,83 €. Notez que le lot de 900 sacs passe 15,29 €.


Voir l'offre

Sujets relatifs
Trouver un mot répété dans un moteur de recherche
Moteur de recherche dans base de données
affichage des liens dans moteur de recherche
comment indexer mon site dans moteur de recherche
Moteur de recherche dans un site
moteur de recherche interne (dans le site)
Moteur de recherche dans 2 tables
Ajouter automatiquement une chaines de caractères dans une fct de recherche
recherche hebergeur gratuit ou petit prix avec traffic illimité
opérateur tilde dans la recherche Google
Plus de sujets relatifs à Pb dans mon petit moteur de recherche (php+mysql)
 > Tous les forums > Forum Forum des Webmasters