Problème " recherche dans mes tables "

Problème " recherche dans mes tables " - PHP - Programmation

Marsh Posté le 17-04-2008 à 13:27:55    

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

Reply

Marsh Posté le 17-04-2008 à 13:27:55   

Reply

Marsh Posté le 17-04-2008 à 13:56:21    

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

Marsh Posté le 17-04-2008 à 14:33:36    

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.

Reply

Marsh Posté le 17-04-2008 à 14:38:30    

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
Reply

Marsh Posté le 17-04-2008 à 16:09:58    

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
Reply

Marsh Posté le 17-04-2008 à 16:39:15    

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é?!!

Reply

Marsh Posté le 17-04-2008 à 17:06:12    

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.  

Reply

Marsh Posté le 17-04-2008 à 19:06:58    

Merci masterpsx pour tes réponses et pour tous.


Message édité par manchester23 le 19-04-2008 à 15:22:04
Reply

Marsh Posté le 19-04-2008 à 15:22:11    

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

Reply

Marsh Posté le 19-04-2008 à 16:04:10    

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
Reply

Marsh Posté le 19-04-2008 à 16:04:10   

Reply

Marsh Posté le 19-04-2008 à 18:04:43    

Merci masterpsx encore

Reply

Sujets relatifs:

Leave a Replay

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