Problème " recherche dans mes tables " - PHP - Programmation
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é !?
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.
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
Marsh Posté le 17-04-2008 à 16:09:58
Ben tu rajoutes une condition du genre :
Code :
|
Je suis pas trop sur du code la mais je pense que c'est en gros ca que tu cherches à faire.
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é?!!
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.
Marsh Posté le 17-04-2008 à 19:06:58
Merci masterpsx pour tes réponses et pour tous.
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
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.
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