Comment faire 1recherche avec plusieurs mots?

Fermé
chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010 - 19 mars 2009 à 22:24
chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010 - 23 mars 2009 à 18:09
Bonjour,
Je pensais trouver sur Google, mais rien à cette heure ci.
Je veux inclure plusieurs critères,plusieurs mots dans la barre de recherche unique et afficher le résultat trouvé.
Ex:plage cannes Résultat:doit afficher les résultats des champs contenant "plage" et "cannes" de la même table.
Je pensais utiliser "simplement" AND ou OR mais ça n'a pas l'air d'être la bonne formule...
Si quelqu'un peut me guider...
Je suis sur WAMP
Merci
[code]
$table = "resto"; // Table à sélectionner dans la base
$champ = "city"; // Champ de la table à afficher pour tester ce script
$champ2 = "title";
$champ3 = "id";
$sql = "SELECT city, title,id FROM $table WHERE $champ,$champ2 LIKE '%".addslashes($recherche)."%' OR $champ2 LIKE '%".addslashes($recherche)."%' ORDER BY title";
[/code]

...en esperant que ce bout de code soit suffisant

2 réponses

sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10
19 mars 2009 à 23:35
Salut,

explode() est ton ami...
0
chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010 1
20 mars 2009 à 09:42
je dois mal l'utiliser....

$table = "resto"; // Table à sélectionner dans la base
$champ = "city"; // Champ de la table à afficher pour tester ce script
$champ2 = "title";
$champ3 = "id";
$sql = "SELECT city, title,id FROM $table WHERE $champ LIKE '%".addslashes($recherche)."%' OR $champ2 LIKE '%".addslashes($recherche)."%' ORDER BY title";

(.....................)

// On affiche le résultat de la requête
// On crée donc ici son propre tableau pour lequel on souhaite une pagination
while ($ligne = mysql_fetch_array($result)) {
echo (explode('|',"<a href=\"affichage.php?id=".$ligne[$champ3]."\">".$ligne[$champ]."\n\n".$ligne[$champ2]."</a><br />\n"));
}
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10 > chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010
20 mars 2009 à 11:37
Heeeuuu... oui, effectivement!

si ce sont des espaces que tu veux exploder déjà, avec "|", t'as tout faut..
et si c'est $champ que tu veux exploder, essaie :

while ($ligne = mysql_fetch_array($result)) {
$var=explode(' ',$ligne['champ']);
echo "<a href=\"affichage.php?id=".$ligne[$champ3]."\">";
foreach($var as $value) {
echo $value."\n\n";
}
echo $ligne[$champ2]."</a><br />\n";
}
0
chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010 1 > sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010
20 mars 2009 à 11:45
non...il me renvoie
"A plage,cannes, il y a 0 restaurants,soit un total de 0 pages."
Donc le changement devient juste l'apparition de virgules...
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10 > chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010
20 mars 2009 à 14:05
Bon, je comprends pas...
Essaie d'être plus clair stp
0
chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010 1 > sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010
20 mars 2009 à 14:36
la base contient les champs ville et nom
j'aimerais pouvoir rentrer plusieurs critères dans la recherche,qui peuvent correspondre à ville et/ou nom et être affichés.Là le renvoie est à 0 quand on entre plusieurs mots,alors que la recherche est OK avec un mot,soit la ville soit le nom.
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10
20 mars 2009 à 16:21
Ok, si tes motifs de recherche sont séparés par des espaces, on garde le même principe de boucle que tout à l'heure, démonstration:

1. tu construit ta requête :
$sql = "SELECT city, title,id FROM $table WHERE ";
//debut de ta requête.
//Ensuite, je suppose que le motif de ta recherche arrive d'un formulaire par la method post.
//On suppose que la variable que tu récupère s'appelle $_POST['find']

$var=explode(" ",$_POST['find']); //on explode la variable qui contient les motifs séparés pas des espaces.
if (is_array($var)) { //on vérifie qu'il y a bien plusieurs motifs (ça ne sera pas forcement toujours le cas)
$nbrow=count($var);
$test=1; //on initialise une variable pour savoir ou on en est dans le foreach
foreach($var as $value) { //on traite toutes les lignes du tableau créé par explode() et on complète la requête
$sql .= "$champ LIKE '%".$value."%' OR $champ2 LIKE '%".$value."%'";
$sql .= ($nbrow>$test) ? ' OR ' : ' ORDER BY title'; //si il reste des lignes dans le tableau, on ajoute OR
ou on termine la requête ORDER BY blablabla...
$test++; //on incrémente la variable (voir com plus haut)
}
} //s'il n'y a qu'un mot dans le motif de recherche, on construit la requête normalement.
else $sql = "SELECT city, title,id FROM $table WHERE $champ LIKE '%".$_POST['find']."%' OR $champ2 LIKE '%".$_POST['find']."%' ORDER BY title";
2. tu l'exploite normalement...

Voila
C'est pas très propre, mais ça marche (j'ai essayé...)
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10
20 mars 2009 à 16:30
J'oubliais, respecte bien les espaces pour la construction de la requête dans le foreach(), sinon, ça ne marchera pas... Tu t'en doute sûrement mais bon, si tu n'a pas l'habitude de ce genre de bidouille...
Et si tu veux faire plus propre, le $sql = "SELECT city, title,id FROM $table WHERE "; (le début de la requête quoi), intègres le dans le if (is_array($var)), sinon, c'est une ligne qui ne sert à rien... et ça sera plus lisible! ;)
0
chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010 1 > sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010
21 mars 2009 à 16:16
Merci mais j'ai dû foiré klk chose: ça marche pas! j'ai un index (note) indéfini, et la page suivante me renvoi recherche comme indéfini....
Mais le multicriteres n'est toujours pas là...
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10 > chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010
21 mars 2009 à 18:31
Message d'erreur stp
0
chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010 1 > sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010
21 mars 2009 à 22:56
undefined index note in linexxx

undefined index recherche in linexxx
0
sebshiva Messages postés 194 Date d'inscription lundi 16 mars 2009 Statut Membre Dernière intervention 17 juin 2010 10 > chanteur06 Messages postés 127 Date d'inscription mardi 23 octobre 2007 Statut Membre Dernière intervention 14 septembre 2010
21 mars 2009 à 23:01
Tu utilises une variable '$index' qui n'est pas définie...
0