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

  FORUM HardWare.fr
  Programmation
  PHP

  Problème " recherche dans mes tables "

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème " recherche dans mes tables "

n°1719187
manchester​23
Posté le 17-04-2008 à 13:27:55  profilanswer
 

bonjour a tous,
mon problème est lorsque je cherche dans ma table avec DEUX ou PLUSIEURS mots clé.
si la recherche sera avec un SEUL mot clé, un simple " LIKE " fera l'affaire.
 
$mots = explode(' ', $_POST['mot_cle']);//séparer les mot qui ont un espace entre eux
$nombre_mots = count ($mots);
$valeur_requete='';
for($i = 0; $i< $nombre_mots; $i++)
    {
         $valeur_requete .= 'AND monchamps LIKE \'%' . $mots[$i] . '%\'';
     }
$valeur_requete = ltrim($valeur_requete,'AND');//supprimer le premier AND
$res=mysql_query("SELECT * FROM matable WHERE ".$valeur_requete." ORDER BY id" );  
 
Mais le problème est lorsqu'il y a plusieurs mot clé pour raffiner la recherche je fait comment?
 
       Merci

mood
Publicité
Posté le 17-04-2008 à 13:27:55  profilanswer
 

n°1719196
vttman2
Je suis Open ...
Posté le 17-04-2008 à 13:56:21  profilanswer
 

Je comprends pas bien ton problème...
Ta requête fonctionne déjà avec plusieurs mots clé !?


---------------
il n'y a pas que le VTT dans la vie, il y a le Snowboard aussi ...
n°1719221
Profil sup​primé
Posté le 17-04-2008 à 14:33:36  answer
 

mets un index fulltext et fait un match against, c'est fait pour ça et ca résoud des problèmes que tu n'as pas encore soulevés.

n°1719225
manchester​23
Posté le 17-04-2008 à 14:38:30  profilanswer
 

voila vttman,
ma fonction fonctionne avec plusieurs mot clé, dans un seul formulaire qui va chercher dans un seul champs dans la table.
si par exemple j'ai deux champs dans ma table, un pour le " Titre " et l'autre " Date ", si je tappe dans le formulaire "Titre" un mot clé sa va marché mais si je veut de plus ajouter un autre mot clé dans le formulaire " "Date"  sa ne va pas marché. il va me donner le résultat que pour le titre malgré que j'ai raffiné la recherche avec une date


Message édité par manchester23 le 17-04-2008 à 15:32:38
n°1719277
masterpsx
Aigloun foutougrafe
Posté le 17-04-2008 à 16:09:58  profilanswer
 

Ben tu rajoutes une condition du genre :

Code :
  1. $mot2 = $_POST['mot2'];
  2. for($i = 0; $i< $nombre_mots; $i++)
  3.     {
  4.          $valeur_requete .= "AND (monchamps LIKE '%" . $mots[$i] . "%''';
  5.          if ($mot2 != "" ) $valeur_requete .= " OR monchamps2 LIKE '%" . $mot2 . "%')";
  6.          else $valeur_requete .= " )";
  7.      }


Je suis pas trop sur du code la mais je pense que c'est en gros ca que tu cherches à faire.


Message édité par masterpsx le 17-04-2008 à 16:10:59
n°1719294
manchester​23
Posté le 17-04-2008 à 16:39:15  profilanswer
 

merci masterpsx mais d'après votre code je vais chercher soit par rapport au premier formulaire soit au deuxième , alors que moi je veut raffiner la recherche par c deux a la fois.
par exemple: j'ai dans ma table 3 champs titre,date et nom
la premiére ligne du table :histoire,1987,jean claude
la deuxiéme ligne du table :amour,1999, yacine
la troisiéme ligne du table :histoire,1988, masterpsx  
si je tape chercher: histoire et masterpsx  sa va me donner la ligne troisiéme et non la premiére!!
comment je peut raffiner ma recherche par plusieurs mot clé?!!

n°1719316
masterpsx
Aigloun foutougrafe
Posté le 17-04-2008 à 17:06:12  profilanswer
 

Si mon mot clef1 c'est "histoire" et le mot clef2 "masterpsx" ca retournera la 1er et la 3éme ligne. Si on veut que les 2 champs correspondent a leur mot clef respectif et retourne donc la 3éme ligne dans cet exemple,  il faut utiliser "AND" à la place de "OR" tout simplement.  

n°1719408
manchester​23
Posté le 17-04-2008 à 19:06:58  profilanswer
 

Merci masterpsx pour tes réponses et pour tous.


Message édité par manchester23 le 19-04-2008 à 15:22:04
n°1720280
manchester​23
Posté le 19-04-2008 à 15:22:11  profilanswer
 

ma question maintenant est :
lorsque ma requete est: ("SELECT * FROM matable WHERE ".$valeur_requete." ORDER BY id" ); est cela me donne en langage SQL : SELECT * FROM matable WHERE monchamp LIKE '%quelque_chose%' ORDER BY id  .  par exemple.
est ce que je ne risque par une injection SQL car ma variable: $valeur_requete je ne l'ai pas protégé? est si je vais la protégé cela me donne:   SELECT * FROM matable WHERE monchamp LIKE \'%quelque_chose%\' ORDER BY id est sa ne va pas marché!
 
merci

n°1720290
masterpsx
Aigloun foutougrafe
Posté le 19-04-2008 à 16:04:10  profilanswer
 

C'est pas ta variable $valeur_requete le problème puisque c'est toi qui lui donne sa valeur, c'est plutot $mots, utilises : mysql_real_escape_string($mots[$i]) par exemple ca sécurise déja pas mal tes requétes.


Message édité par masterpsx le 19-04-2008 à 16:04:34
mood
Publicité
Posté le 19-04-2008 à 16:04:10  profilanswer
 

n°1720314
manchester​23
Posté le 19-04-2008 à 18:04:43  profilanswer
 

Merci masterpsx encore


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

  Problème " recherche dans mes tables "

 

Sujets relatifs
problème avec javaMailchamps liés entre 2 tables (mysql)
[PHP/SQL]: Problème: Envoie de formulaire PHP vers Mysql[PERL] probleme avec foreach et l'ascii 10
envoi mail problèmeproblème assez pointu entre writeexcel et session_start()
probleme ecoute radioProbleme avec format Date
URGENT !!! Recherche aide concernant AMFPHP (remoting) pour projetGTA4[MySQL] Problème de recherche sur 3 tables
Plus de sujets relatifs à : Problème " recherche dans mes tables "


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