Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 11h01   #1
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 72
Points : 17
Points : 17
Par défaut recherche avec plusieurs critéres

Salut
Je voudrais faire une formulaire du recherche qui contient plusieurs champs : textes et listes déroulantes. Le problème est si un visiteur rempli tous les champs ca ne fait aucun souci dans la requête, mais le visiteur peut ne pas remplir tous les champs et comme sa je pense qu'il me faut plusieurs conditions.
Savez-vous une méthode pour bien réaliser ce moteur de recherche compliqué ?
Merci d'avance
hous04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h19   #2
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 72
Points : 17
Points : 17
Par défaut Ajouter un LIKE dans la requête

J'ai réussi a faire comme ca:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
/ on récupère les critères sélectionnés
                 extract($_POST);
 
                $i = 0;
           			$sujet = $_POST['sujet'];
           			$specialite = $_POST['specialite'];
					$struc = $_POST['struc'] ;
                // si la variable est présente, on lui affecte une place dans le tableau 'choix[]', qui nous servira ensuite à construire le WHERE de la requête.
                 if(!empty($sujet)) { $choix[$i++] = "titre = '$sujet'"; }
                 if(!empty($specialite)) { $choix[$i++] = "specialite = '$specialite'"; }
                 if(!empty($struc)) { $choix[$i++] = "struc = '$struc'"; }
                 // etc... tu fais pareil pour chaque critère
 
                // on insère les éléments remplis dans une variable $critere, en commençant par la première occurrence, puis on boucle
                 $critere = $choix[0]." ";
 
                for($j=1;$j<$i;$j++)
                {
                         $critere .= " AND ".$choix[$j]." ";
                 }
 
                // enfin on fait la requête si $i >0, ça veut dire qu'il y a des critères
                 if($i > 0)
                {
                         // requete de selection
                         $sql = mysql_query("SELECT * FROM masteres WHERE $critere ORDER BY id") or die(mysql_error());
                 }
 
                // si $i = 0, alors l'utilisateur n'a pas saisi de critère, là soit on fait la même requete mais sans "WHERE $critere", soit on lui demande de saisir au moins un critère.
                 else
                {
                         $sql = mysql_query( "SELECT * FROM masteres ORDER BY id") or die(mysql_error());
                 }
Il marche bien sauf que je voudrais ajouter un LIKE dans la requête mais j'ai pas réussi à faire.
Pouvez vous m'aider SVP ?
hous04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h32   #3
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
Bonjour,

Pour le like il te suffit de faire ainsi :
Code php :
$sql = mysql_query("SELECT * FROM masteres WHERE $critere  AND monChamp LIKE '%recherche%' ORDER BY id") or die(mysql_error());

Il te suffit ensuite de remplacer monChamp par le champ correspondant et rechercher par le mot à rechercher.
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h37   #4
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 72
Points : 17
Points : 17
Citation:
Envoyé par humitake Voir le message
Bonjour,

Pour le like il te suffit de faire ainsi :
Code php :
$sql = mysql_query("SELECT * FROM masteres WHERE $critere  AND monChamp LIKE '%recherche%' ORDER BY id") or die(mysql_error());

Il te suffit ensuite de remplacer monChamp par le champ correspondant et rechercher par le mot à rechercher.
$critere est un tableau qui contient les noms des champs donc je peux pas les répéter
hous04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h41   #5
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 72
Points : 17
Points : 17
j'ai essayé comme ca:
Code :
$sql = mysql_query("SELECT * FROM masteres WHERE $critere LIKE '%$critere%' ORDER BY id") or die(mysql_error());
mais un erreur s'affiche:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'fssfs' %' ORDER BY id' at line 1
hous04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h51   #6
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
Ah !

Je crois avoir compris, en fait tout tes champs que tu récupère en $_POST sont les champs que tu souhaite rechercher grâce à LIKE ?

Dans ce cas je m'excuse mais ce n'est pas ainsi qu'il faut procéder. Tu as d’ailleurs commencé mais c'est incomplet.

Je prend par exemple cette ligne :
Code php :
if(!empty($sujet)) { $choix[$i++] = "titre = '$sujet'"; }
Il faut en fait la remplacer par :
Code php :
if(!empty($sujet)) { $choix[$i++] = "titre LIKE '%$sujet%'"; }

Tu fait ensuite la même chose pour les autres et tu utilise la requête que tu avait avant :
Code php :
$sql = mysql_query("SELECT * FROM masteres WHERE $critere ORDER BY id") or die(mysql_error());
humitake est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/02/2012, 14h50   #7
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 72
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 72
Points : 17
Points : 17
Citation:
Envoyé par humitake Voir le message
Ah !

Je crois avoir compris, en fait tout tes champs que tu récupère en $_POST sont les champs que tu souhaite rechercher grâce à LIKE ?

Dans ce cas je m'excuse mais ce n'est pas ainsi qu'il faut procéder. Tu as d’ailleurs commencé mais c'est incomplet.

Je prend par exemple cette ligne :
Code php :
if(!empty($sujet)) { $choix[$i++] = "titre = '$sujet'"; }
Il faut en fait la remplacer par :
Code php :
if(!empty($sujet)) { $choix[$i++] = "titre LIKE '%$sujet%'"; }

Tu fait ensuite la même chose pour les autres et tu utilise la requête que tu avait avant :
Code php :
$sql = mysql_query("SELECT * FROM masteres WHERE $critere ORDER BY id") or die(mysql_error());
Merci beaucoup il marche bien
hous04 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h21.


 
 
 
 
Partenaires

Hébergement Web