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
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
A voir également:
- Comment faire 1recherche avec plusieurs mots?
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Identifiants et mots de passe - Guide
- Comment savoir si mes mots de passe sont compromis - Guide
- Mots entre amis messenger solution - Forum Facebook
- Faire une phrase avec les mots suivants ✓ - Forum Loisirs / Divertissements
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
19 mars 2009 à 23:35
Salut,
explode() est ton ami...
explode() est ton ami...
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
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é...)
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é...)
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
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! ;)
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! ;)
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
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à...
Mais le multicriteres n'est toujours pas là...
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
21 mars 2009 à 18:31
Message d'erreur stp
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
21 mars 2009 à 22:56
undefined index note in linexxx
undefined index recherche in linexxx
undefined index recherche in linexxx
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
21 mars 2009 à 23:01
Tu utilises une variable '$index' qui n'est pas définie...
20 mars 2009 à 09:42
$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"));
}
20 mars 2009 à 11:37
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";
}
20 mars 2009 à 11:45
"A plage,cannes, il y a 0 restaurants,soit un total de 0 pages."
Donc le changement devient juste l'apparition de virgules...
20 mars 2009 à 14:05
Essaie d'être plus clair stp
20 mars 2009 à 14:36
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.